考虑这种情况:
我们必须对计算中出现数据的元素执行element.getText()
。
页面上存在加载元素,但加载数据需要5秒钟。
显式等待和隐式等待两者都将查看元素是否存在,从1到5秒为真,它们将执行返回空文本。
我们可以在这个案子上等什么?
或者剩下的唯一解决方案是Thread.sleep(5000)
答案 0 :(得分:0)
使用这种方式可以解决问题
WebDriverWait wait = new WebDriverWait(driver,120);
wait.until(ExpectedConditions.elementToBeClickable(By.id(id)));
答案 1 :(得分:0)
您是否尝试过此代码? 在我试图用unnessacary代码欺骗他之前,我遇到了同样的问题,并且它有效。
this.browser.waitForVisible(locator);
this.browser.getText(locator);
答案 2 :(得分:0)
我认为这取决于目前的情况。如果在您的应用程序中,元素以默认值存在,并且我们需要等待显示的值,那么我们可以创建Explicite等待更改的值。在这种情况下,更糟糕的情况是计算出的值与默认值相同,那么我们需要等待指定的整个超时。
答案 3 :(得分:0)
试试这个
(new WebDriverWait(driver, 10))wait.until(ExpectedConditions.elementToBeClickable("element locator"));
答案 4 :(得分:0)
您可以使用其他等待方法来检查是否有任何查询仍处于活动状态。 如果返回0 - >这意味着你想要的文字被计算出来。
<PackageReference Include="System.Net.NameResolution" Version="4.3" />
这会导致等待ajax加载。