我已经仔细查看了这里,但是web元素等待似乎不适合我的代码。
我对Java和Selenium相当陌生。我想尝试在超时之前将等待元素放入我的代码中。
有什么建议吗?
当它到达这个点时,它会崩溃,因为页面需要一段时间来搜索这个地址。
@Step ("Verifying landmark")
public void validatingLandmark(String s){
String actualValue = getDriver().findElement(By.id("MainContent_lblLandmarkUPRN")).getText();
assertEquals(s, actualValue);
TimeOut();
}
您需要使用WebDriverWait
。例如,显式地等待一个元素变为可见:
WebDriverWait wait = new WebDriverWait(getDriver(), timeOut);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("MainContent_lblLandmarkUPRN")));
String actualValue = element.getText();
您也可以使用textToBePresentInElement
期望条件:
WebElement element = wait.until(ExpectedConditions.textToBePresentInElement(By.id("MainContent_lblLandmarkUPRN"), s));
您可以使用Explicit wait或Fluent wait
显式等待示例-
WebDriverWait wait = new WebDriverWait(WebDriverRefrence,20);
WebElement aboutMe;
aboutMe= wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("about_me")));
流畅等待示例-
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(20, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement aboutMe= wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("about_me"));
}
});
查看本教程了解更多细节
您可以在这里使用隐式等待或休眠
含蓄等:driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
Thread.sleep(2000L);
在这种情况下,use抛出InterruptedException
希望对大家有所帮助