如何自动比较更新后的网页和未更新的网页?

时间:2014-08-01 10:33:04

标签: c# selenium automated-tests html-agility-pack

为我可怜的英语道歉。

我必须将更新后的网页的详细信息与未更新的网页进行比较,例如所有元素的位置和大小。

我首先使用google diff。如果html源代码相同,我会使用selenium Webdriver来比较元素。

这是代码。

IWebDriver d1 = new FirefoxDriver();
IWebDriver d2 = new FirefoxDriver();
d1.Navigate().GoToUrl(URL);
d2.Navigate().GoToUrl(URL);
compare();
d1.Navigate().GoToUrl(URL2);
d2.Navigate().GoToUrl(URL2);
compare();


public void compare()
{
   List<IWebElement> list1 = new List<IWebElement>();
   foreach(IWebElement e in d1.FindElements(By.CssSelector("*")))
   {
      list1.Add(e);
   }
   foreach(IWebElement e in d2.FindElements(By.CssSelector("*")))
   {
      list2.Add(e);
   }
   for(int i = 0; i<list1.Count; i++)
   {
      if(list1[i].Size.ToString()!=list2[i].Size.ToString())
      {
         //not the same size
      }
      if(list1[i].Location.ToString()!=list2[i].Location.ToString())
      {
         //not the same location
      }
   }
}

但如果它读了太多页面就没用了。 它可以比较不匹配的元素,例如将page1中的A Element与page2中的B Element进行比较。

所以我尝试使用HtmlAgilityPack获取带有html源的所有元素的Xpath列表,然后调用selenium以通过Xpath查找元素。

幸运的是,但这是一个问题。

如果有JavaScripts会在页面的网页中插入一些html标记,而selenium会执行它们,那么HtmlAgilityPack会得到错误的Xpath。

例如,html是

<div>
</div>

所以Xpath是//div

但是在执行js之后,html就是

<div>
   <div>
   </div>
</div>

xpath是//div/div

但是HtmlAgilityPack仍然获得//div因为它读取了html源代码。

我怎么解决?

感谢阅读。

0 个答案:

没有答案