工具/脚本访问ASP.NET项目中的所有页面?

时间:2011-08-24 06:42:50

标签: asp.net automated-tests

有没有人知道我可以用来访问ASP.NET Webforms Web应用程序项目中所有页面的工具,脚本,包? (我们没有使用任何MVC功能)

最好,我希望能够生成一个要点击的URL列表,编辑列表,这样我就可以添加一些查询字符串参数,点击列表中的所有页面,并收集HTTP响应代码:(200,404) ,500,301,等等)。

2 个答案:

答案 0 :(得分:0)

  • 设计时间

不要在应用程序中为URL使用字符串文字,而是在每个页面类中定义Url()方法,如下所示:

public static string Url() { get { return "~/this_page.aspx"; } }
public static string Url(int ID) { get { return "~/this_page.aspx?id=" + ID; } }

或列出静态类中的所有网址

public static class URL {
    public static string Login() { get { return "~/login.aspx"; } }
    public static string DisplayRecord(int recordID) 
        { get { return "~/display.aspx?id=" + recordID; } }
  • 运行

使用Web测试框架抓取所有链接并编辑结果。我blogged关于使用Selenium的一种可能的解决方案。

答案 1 :(得分:0)

我创建了一个WinForms应用程序,它可以从.csproject获取可以访问的页面,并可以通过单击按钮打开它们。

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Xml;
using System.Xml.XPath;

namespace OpenAllPages
{
    public partial class Form1 : Form
    {
        public static IList<string> Pages;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string xmlstring = ReadXml("TaskManager.csproj");
            Pages = ParseAllPages(xmlstring);
            pagesListBox.DataSource = Pages;
        }

        private string ReadXml(string location)
        {
            try
            {
                var myFile = new StreamReader(location);
                string myString = myFile.ReadToEnd();
                myFile.Close();
                return myString;
            }
            catch (Exception e)
            {
                MessageBox.Show(String.Format("An error occurred: '{0}'", e.Message));
            }
            return null;
        }

        private IList<string> ParseAllPages(string xmlstring)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xmlstring);
            XPathNavigator nav = xmlDoc.DocumentElement.CreateNavigator();
            XmlNamespaceManager manager = new XmlNamespaceManager(nav.NameTable);
            manager.AddNamespace("x", "http://schemas.microsoft.com/developer/msbuild/2003");
            var elements = nav.Select("x:ItemGroup/x:Content", manager);

            var pageList = new List<string>();
            while (elements.MoveNext())
            {
                var page = elements.Current.GetAttribute("Include", "");
                if (page.EndsWith(".aspx"))
                    pageList.Add(page);
            }
            return pageList as IList<string>;
        }

        private string AddPagePrefix(string page)
        {
            return "http://localhost:8080/" + page;
        }

        private void openAllButton_Click(object sender, EventArgs e)
        {
            foreach (string page in Pages)
                System.Diagnostics.Process.Start("chrome.exe", AddPagePrefix(page));
        }
    }
}

Here is a link to the code

您需要在OpenAllPages项目中放置包含要打开的页面的项目文件,并将其Copy to Output属性设置为“Copy if newer”。

我Form1_Load将TaskManager.csproj更改为项目文件的名称。 并在:

System.Diagnostics.Process.Start("chrome.exe", AddPagePrefix(page));

将参数重命名为您正在使用的浏览器的可执行文件。

相关问题