int editBtnCount=driver.findElements(By.xpath("abc")).size();
当没有通过xpath By.xpath("abc")
识别出这样的元素时,我的程序会卡在上面的代码中。所以它应该返回0对吗?但它挂了。
答案 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()
。这样做会导致不可预测的等待时间。@Test
。driver.quit()
方法中调用tearDown(){}
以关闭&正常销毁 WebDriver 和 Web客户端实例。