如何以最少的等待时间加速Java Selenium脚本

时间:2018-12-14 11:42:47

标签: java selenium-webdriver xpath css-selectors webdriver-w3c-spec

我目前正在研究Java硒项目,该项目通常是一个小脚本,在该脚本中,我必须检查每个元素是否存在,并基于是否触发了某些操作,但是我们主要关心的是完成脚本的持续时间

虽然在每种情况下脚本都在运行,但是基本上我已经在脚本中使用了下面的每个脚本并进行了测试,但是我发现脚本执行时间的速度改进很少。我使用的是

words = [word.strip() for word in words if word != '']

answer = " ".join(reversed(words)).strip()

以及它

driver.manage().timeouts().implicitlyWait(10000,TimeUnit.MILLISECONDS);

!(driver.findElement(By.xpath("Element Xpath)).isEmpty()) 

我知道我可以使用CSS选择器,但是由于DOM Tree结构的原因,这是不可行的。 可以用来代替

的东西
driver.findElements(By.xpath("Element Xpath)).size()>0

这是为了检查元素是否存在,并基于此我必须触发其他多个动作。

2 个答案:

答案 0 :(得分:1)

您的方法存在一些问题。

  1. .implicitlyWait()实际上并没有等待。它设置了驱动程序实例的超时,因此您只需要设置一次,而不必在每次等待时调用它。

  2. driver.findElement(...).isEmpty()无法编译。也许您是说.findElements()?无论哪种方式,.isEmpty().size() > 0的速度差异都可以忽略不计。

  3. 主要问题是检查不存在的东西时启用了隐式等待...尤其是10s等待。这意味着,每次检查元素时,Selenium都会等待10秒钟,即使它期望它不存在。

关闭隐式等待(将其设置为0),然后检查是否存在不希望出现的元素,然后再将其重新打开,将为您提供更好的服务。那将是您希望不存在的10s x存在检查数。根据您执行的存在检查次数,这可能会花费大量时间。缺点之一是,如果您的页面很复杂且具有后台进程,则需要先等待页面(或页面的一部分)完成加载,然后再检查是否存在隐式等待。

旁注...硒贡献者表示,不应使用隐式等待。改用WebDriverWait,但这是另一回事。

答案 1 :(得分:1)

有几种方法可以最佳速度执行测试套件。您的代码块将使我们对您遇到延迟的原因有更多的了解。但是,对于您的代码段,这里有一些补救措施:

  

请勿混合使用隐式和显式等待。这样做可能导致无法预测的等待时间。例如,将隐式等待设置为10秒,将显式等待设置为15秒,则可能导致20秒后发生超时。

Locator Strategies_W3C

  • 使用 CssSelector XPath 性能有所不同。一些要点:
    • 对于初学者来说,XPath和CSS之间的性能没有显着差异。
    • 在IE8之类的旧版浏览器中遍历DOM不适用于CSS,但可以与XPath一起使用。 XPath可以遍历DOM(例如从子级到父级),而CSS只能遍历DOM(例如从父级到子级)。但是,无法在较旧的浏览器中使用CSS遍历DOM并不一定是一件坏事,因为它更多地表明您的页面设计不良,并且可能会受益于一些有用的标记。
    • 赞成CSS的观点是,它们是主观的,它们更具可读性,简洁性和简洁性。
    • Ben Burton提到您应该使用CSS,因为这是构建应用程序的方式。这使测试更易于编写,讨论和让其他人维护。
    • Adam Goucher表示采用一种更加混合的方法-首先关注ID,然后关注CSS,并仅在需要时使用XPath(例如,沿DOM前进),并且XPath对于高级用户将始终更加强大定位器。
    • 您可以在Why should I ever use CSS selectors as opposed to XPath for automated testing?
    • 中找到详细的讨论

结论

在考虑上述因素时,您需要: