2017-09-15 65 views
0

考虑这种情况:硒等待时以单元数据负载从一个计算

我们必须在其数据从计算上来的元素进行element.getText()

页面加载元素存在,但数据需要5秒加载。

显式等待和隐式等待都会查看元素是否存在,1到5秒为真,并且它们将执行返回空文本。

我们可以在这种情况下等待什么? 或者唯一的解决办法左边是Thread.sleep(5000)

+0

你在找这样的东西吗? https://stackoverflow.com/a/15657053 –

+0

谢谢我正在寻找这个。它并没有真正解决我的问题,而是一种解决方法。 –

回答

0

您可以使用另一个等待的方法来检查,如果有任何疑问仍然有效。 如果返回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负载。

0

使用这种方法可以解决你的问题

WebDriverWait wait = new WebDriverWait(driver,120); 
wait.until(ExpectedConditions.elementToBeClickable(By.id(id))); 
0

您是否尝试过这个代码。 我曾尝试用明确的代码欺骗他,并且它工作之前,我有同样的问题。

this.browser.waitForVisible(locator); 
this.browser.getText(locator); 
0

我认为这取决于目前的情况。如果在您的应用程序中,该元素具有默认值,并且我们需要等待该值出现,那么我们可以创建Explicite等待更改的值。在这种情况下,更糟的情况是计算值与默认值相同,那么我们需要等待指定的整个超时。

0

试试这个

(new WebDriverWait(driver, 10))wait.until(ExpectedConditions.elementToBeClickable("element locator"));