2012-04-05 49 views
0

我是硒的新手。硒测试递归定位元素很慢

我试图遍历网页上的下拉框中的所有元素与很多子元素。我这样做是为了获得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--; 
     } 
    } 
} 
+0

也许使用一个XPath获取由所有选项组成的节点集,而不是每个选项的一个XPath? – minopret 2012-04-05 07:06:56

+0

你可以发布你的源?我喜欢cssSelector over xpath。此外,您可以从下拉列表中选择所有选项,而不使用cssSelector或xpath,并使用'Select select = new Select(webElement);列表 options = select.getOptions()'。代码是java。你使用哪种语言? – Tarken 2012-04-05 07:44:49

回答

0

您正在使用本机xpath引擎的firefox中运行测试。所以很难说出为什么你的测试很慢,除非你提供代码。 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")); 
} 
0

参见:Selenium 2.0 IE Xpath Performance

鉴于你的情况,我想你会过得更好加载页面源到像HtmlAgilityPack图书馆和解析它是方式 - 你会看到巨大的性能提升。对于C#以外的语言,请看here

0

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