我提出了一项艰巨的任务。我对 selenium 相当陌生,仍在研究等待元素等的功能。
我不得不在一个网站上操作一些数据,然后转到另一个网站。问题:操纵调用一个脚本,使一个小的“保存...”标 checkout 现,而操纵的数据正在后台处理。我必须等待,直到我可以继续到下一个网站。
这就是:我该如何等待和元素消失?事情是:它总是存在于DOM中,但只有通过一些脚本才能显示(我想,请参见下图)。x1c 0d1x
这是我尝试过的,但它就是不起作用-没有等待, selenium 只是进行到下一步(并卡住了一个警报,问我是否要离开或留在页面上,因为“保存...”)。
private By savingLableLocator = By.id("lblOrderHeaderSaving");
public boolean waitForSavingDone(By webelementLocator, Integer seconds){
WebDriverWait wait = new WebDriverWait(driver, seconds);
Boolean element = wait.until(ExpectedConditions.invisibilityOfElementLocated(webelementLocator));
return element;
}
更新/解决方案:
我想出了以下解决办法:我构建了自己的方法,基本上它在循环中检查要更改的CssValue。
该循环检查一定量的时间以使CSSVALUE“显示”从“阻塞”变为另一状态。
public void waitForSavingOrderHeaderDone(Integer _seconds){
WebElement savingLbl = driver.findElement(By.id("lblOrderHeaderSaving"));
for (int second = 0;; second++) {
if (second >= _seconds)
System.out.println("Waiting for changes to be saved...");
try {
if (!("block".equals(savingLbl.getCssValue("display"))))
break;
} catch (Exception e) {
}
}
9条答案
按热度按时间f5emj3cl1#
您可以等待WebElement抛出StaleElementReferenceException,如下所示:
因此,您将传入要等待的WebElement以及要等待的最大秒数。
s4chpxco2#
Webdriver内置了等待功能,您只需要内置要等待的条件。
pxyaymoc3#
我不确定,但你可以试试这样的东西:)
voj3qocg4#
这是 selenium 2.4.0版的,你必须用隐形方法才能找到它。
uqxowvwt5#
我用下面的C#代码来处理这个问题,你可以把它转换成Java
qxsslcnc6#
你也可以尝试等待 AJAX 调用完成,我已经用它来检查页面加载完成和所有元素可见的时间。
代码如下-https://stackoverflow.com/a/46640938/4418897
5hcedyr07#
你可以使用XPath和WebDriverWait来检查元素的style属性中是否存在
display: none
。1hdlvixo8#
尝试使用
invisibilityOfElementLocated
方法。您可以在此处引用示例How to wait until an element no longer exists in Selenium?pgpifvop9#
enter image description here我为元素从dom中消失创建了自己的方法....
在条件类中(在.m2\存储库\组织\ selenium hq\ selenium \ selenium 支持\3.141.59\ selenium 支持-3.141.59.jar!\组织\openqa\ selenium \支持\ui\预期条件类中)
我们可以看到"isInvisible“方法与”isDisplayed“方法,,,我对”isEnabled“编写了相同的内容