使用Java

时间:2018-05-17 12:05:15

标签: selenium timeout

当您执行类似

的操作时
WebElement tab = driver.findElement(By.xpath("//table")) 

你可以发出像

这样的命令
 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

更改超时。但是现在,如果您想要执行以下操作,该怎么办:

 public String getCellText(WebElement tab) {
 {
     WebElement td = tab.findElement(By.xpath(".//td"));
     return td.getText();
 }

你不能做

 tab.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

有没有办法改变超时?当你有一个表是一个元素,并且想要找到下面的行时,如果可能没有行,这就特别有趣。如果您执行了tab.findElements(By.xpath(" tr"))并且没有行,则可能需要一分钟才能返回。

有没有办法像上面那样为元素设置超时?

1 个答案:

答案 0 :(得分:4)

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);  

这是隐含等待。
为WebDriver对象实例的生命周期设置隐式等待

由于标签是网络元素,因此您无法执行以下操作:

tab.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

您可以选择显式等待来更改特定条件的超时。

代码将是这样的:

new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(locator));  

它返回一个web元素。你也可以这样:

WebElement element =   new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(locator));