diver.findElements在Selenium被绞死

时间:2018-05-03 16:53:20

标签: java selenium selenium-webdriver webdriver

int editBtnCount=driver.findElements(By.xpath("abc")).size();

当没有通过xpath By.xpath("abc")识别出这样的元素时,我的程序会卡在上面的代码中。所以它应该返回0对吗?但它挂了。

4 个答案:

答案 0 :(得分:0)

如果没有这样的元素,您可以使用Try-catch方法处理它。因此,在没有挂起的Exception之后脚本将不会继续。

try
{
int editBtnCount=driver.findElements(By.xpath("abc")).size();
}  catch (Exception e) 
   {
   System.out.println("Element not find");
   e.printStackTrace();
   }

所以在尝试中,它将尝试查找元素,如果没有单一,它将用于catch块。执行将继续。在catch中,您也可以传递用户定义消息。

答案 1 :(得分:0)

Hang不是一个合适的词,也许你想叫它等待你必须在你的剧本中定义的某个特定时间。[隐含等待我正在谈论]。

您的代码

int editBtnCount=driver.findElements(By.xpath("abc")).size();  

将等待元素 xpath " abc"直到宣布隐式等待的时间。

如果找到元素,则.size()方法将返回计数。

其他 0 将返回时没有例外

答案 2 :(得分:0)

driver.findElement(By loc)driver.findElements(By loc),这两种方法都受到implicit wait次的影响。因此,两种方法都将返回匹配的元素/元素,或者重复尝试,直到达到配置的超时。 因此,如果您的脚本卡住了,那就是预期的行为。

答案 3 :(得分:0)

根据文档findElements()方法,使用提供的机制查找当前页面中的所有元素。此方法受执行时通过 implicitlyWait explicitWait 配置的时间范围的影响。当隐式显式等待时,只要找到集合中超过0 项,此方法就会返回如果达到超时,将返回空列表

我用你的代码行做了一个小测试,如下所示:

driver.get("https://www.google.com/");
System.out.println(driver.findElements(By.id("automaticSoldier")).size());
driver.quit();

它在控制台中正确打印以下内容:

Starting ChromeDriver 2.38.551601 (edb21f07fc70e9027c746edd3201443e011a61ed) on port 7531
Only local connections are allowed.
May 04, 2018 1:32:28 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
0

但是当你发现程序挂起时,主要的怀疑是:

  • 您已配置implicitlyWait() WebDriver 实例正在等待。

其他注意事项

要获得更好的Test Harness,请按以下步骤操作:

  • implicitlyWait()的实例替换为explicitlyWait()的实例,即WebDriverWait()所需的实例。
  • 请勿混用implicitlyWait()explicitlyWait()。这样做会导致不可预测的等待时间。
  • JDK 升级到最近的级别JDK 8u162
  • Selenium 升级到当前级别Version 3.11.0
  • WebDriver 变体升级到当前级别。 ChromeDriver v2.38 / GeckoDriver v0.20.1
  • 升级 WebClient 变体(即 Firefox Chrome IE Edge Safari )到当前级别。
  • 通过 IDE 清理您的项目工作区仅使用所需的依赖项重建项目
  • 使用CCleaner工具清除执行 Test Suite 之前和之后的所有操作系统杂务。
  • 如果您的基本 Web客户端版本太旧,请通过Revo Uninstaller将其卸载并安装最新的GA和已发布的 Web客户端版本。
  • 进行系统重启
  • 执行@Test
  • 始终在driver.quit()方法中调用tearDown(){}以关闭&正常销毁 WebDriver Web客户端实例。