【问题标题】:Selenium Test to recursively locate elements very slowSelenium 测试递归地定位元素非常慢
【发布时间】:2020-02-15 13:00:12
【问题描述】:

我是硒的新手。

我正在尝试遍历具有很多子元素的网页上的下拉框中的所有元素。我这样做是为了获取选择标签中所有选项的所有 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--; 
      } 
   } 
}

【问题讨论】:

  • 也许使用一个 XPath 来获取包含所有选项的节点集,而不是每个选项一个 XPath?
  • 你能发布你的来源吗?我更喜欢 cssSelector 而不是 xpath。此外,您可以从没有 cssSelector 或 xpath 的下拉列表中获取所有选项 Select select = new Select(webElement); List&lt;WebElement&gt; options = select.getOptions()。代码是java。你用的是什么语言?

标签: selenium webdriver selenium-webdriver


【解决方案1】:

您正在具有本机 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"));
}

【讨论】:

    【解决方案2】:

    见:Selenium 2.0 IE Xpath Performance

    鉴于您的情况,我认为您最好将页面源代码加载到 HtmlAgilityPack 之类的库中并以这种方式进行解析 - 您会看到巨大的性能提升。对于 C# 以外的语言,请查看 here

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 2016-04-15
        相关资源
        最近更新 更多