Selenium Test以递归方式定位元素非常慢

时间:2012-04-05 06:56:38

标签: selenium webdriver selenium-webdriver

我是硒的新手。

我正在尝试遍历包含大量子元素的网页上的下拉框中的所有元素。我这样做是为了获取select标签中所有选项的所有href属性。 我正在使用Xpath表达式找到元素。

我正在使用Selenium WebDriver和FireFox浏览器。结果是我的预期,但测试非常缓慢。

如果有什么方法可以通过任何替代方法使测试更快?

这是我正在使用的代码 -

private void captureElements(String xpath)
{ 

  List<WebElement> list=null;

    if((list=driver.findElements(By.xpath(xpath)))!=null){ 

       int length = list.size(); int i=length;

        while(i>0){ 

          WebElement ele = list.get(length-i); 
          Actions builder = new Actions(driver);
          builder.moveToElement(ele).build().perform(); 

          LogElementToExcel(ele); 

          int index = length-i+1; 
          String newxpath = xpath.replace("/a", "["+index+"]/ul/li/a");  
          captureElements(newxpath); 
          i--; 
      } 
   } 
}

3 个答案:

答案 0 :(得分:0)

请参阅:Selenium 2.0 IE Xpath Performance

根据您的情况,我认为您最好将页面源加载到像HtmlAgilityPack这样的库中并以这种方式解析它 - 您将看到巨大的性能提升。对于C#以外的语言,请查看here

答案 1 :(得分:0)

您正在firefox中运行具有本机xpath引擎的测试。因此,除非您提供代码,否则很难说出为什么您的测试很慢。 Xpath在IE中很慢,因为IE没有本机xpath引擎,但此时似乎不是你的问题。

我认为下面会比你的xpath解决方案更快。试一试。

WebElement element = driver.findElement(By.id("idOfMySelectBox"));
Select select = new Select(element);
List<WebElement> options = select.getOptions();
for(WebElement option:options){
  System.out.println(option.getAttribute("href"));
}

答案 2 :(得分:0)

使用任何GUI工具(如selenium)的自动化速度很慢,启动浏览器的代理是一个缓慢的过程,所有GUI元素的完整显示也是一个缓慢的过程。如果速度是一个因素,请不要忘记您可以使用无头工具进行同样全面的测试。执行时间可减少多达40%。曾经使用过的工具是JWebUnit。试试速度。