考虑这种情况:硒等待时以单元数据负载从一个计算
我们必须在其数据从计算上来的元素进行element.getText()
。
页面加载元素存在,但数据需要5秒加载。
显式等待和隐式等待都会查看元素是否存在,1到5秒为真,并且它们将执行返回空文本。
我们可以在这种情况下等待什么? 或者唯一的解决办法左边是Thread.sleep(5000)
考虑这种情况:硒等待时以单元数据负载从一个计算
我们必须在其数据从计算上来的元素进行element.getText()
。
页面加载元素存在,但数据需要5秒加载。
显式等待和隐式等待都会查看元素是否存在,1到5秒为真,并且它们将执行返回空文本。
我们可以在这种情况下等待什么? 或者唯一的解决办法左边是Thread.sleep(5000)
您可以使用另一个等待的方法来检查,如果有任何疑问仍然有效。 如果返回0 - >这意味着你想要的文本被计算。
WebDriverWait driverWait = new WebDriverWait(webDriver, 20);
ExpectedCondition<Boolean> expectation;
expectation = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driverjs) {
return (Boolean) ((JavascriptExecutor) webDriver).executeScript("return (window.jQuery != null) && (jQuery.active === 0);");
}
};
driverWait.until(expectation);
哪个会导致等待ajax负载。
使用这种方法可以解决你的问题
WebDriverWait wait = new WebDriverWait(driver,120);
wait.until(ExpectedConditions.elementToBeClickable(By.id(id)));
您是否尝试过这个代码。 我曾尝试用明确的代码欺骗他,并且它工作之前,我有同样的问题。
this.browser.waitForVisible(locator);
this.browser.getText(locator);
我认为这取决于目前的情况。如果在您的应用程序中,该元素具有默认值,并且我们需要等待该值出现,那么我们可以创建Explicite等待更改的值。在这种情况下,更糟的情况是计算值与默认值相同,那么我们需要等待指定的整个超时。
试试这个
(new WebDriverWait(driver, 10))wait.until(ExpectedConditions.elementToBeClickable("element locator"));
你在找这样的东西吗? https://stackoverflow.com/a/15657053 –
谢谢我正在寻找这个。它并没有真正解决我的问题,而是一种解决方法。 –