当WebDriverWait或隐式等待不能执行时,如何在Selenium WebDriver中等待

时间:2018-05-24 02:59:26

标签: java selenium selenium-webdriver

我正在使用Selenium,我面临以下问题:

基本上,点击页面上的按钮后,页面上会出现一个弹出窗口。我想解雇弹出窗口。为此,我点击右上角的x图标。我能够正确识别元​​素并使用XPath单击它(我知道XPath是正确的,因为它在Firebug中工作,Selenium在使用XPath时不会抛出任何异常,因此元素必须存在。另外,{{1 }和isDisplayed()返回true)。有趣的是,这样做后弹出窗口不会消失。但是,如果我添加3秒延迟(在解除弹出窗口之前)弹出窗口消失。我的问题是我不想延迟执行程序超过必要的程度,所以我宁愿使用3-5秒的最大延迟,但如果弹出窗口已经准备好与之交互(即被解雇),我想解雇它尽快。

我想过使用类似的东西:

isEnabled()

但是这不起作用,因为说明驱动程序检测到web元素立即存在(并且可见并显示)但是点击将无法工作,除非我等待3秒。

同样,我不能使用:

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 

出于同样的原因(只有当所述元素在3秒之前无法点击/可见时才会起作用,但就 WebDriverWait wait = new WebDriverWait(driver, 30, 5000); wait.until(ExpectedConditions.elementToBeClickable(element)); 而言 - 它立即可见)

有人可以帮助我理解为什么尽管存在这样的事实元素但点击不成功,我怎样才能使点击成功点击Selenium,而不等待完整的3-5秒。

HTML:

WebDriver

谢谢!

3 个答案:

答案 0 :(得分:0)

您是否尝试过使用 FluentWait ? 请尝试以下代码,

Wait<WebDriver> wait = new FluentWait<WebDriver>(pDriver).withTimeout(100, TimeUnit.SECONDS).pollingEvery(600,TimeUnit.MILLISECONDS).ignoring(NoSuchElementException.class);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("selector"));

您可以使用上述情况或以下情况

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("selector")));

有关 FluentWait 的进一步参考,请参阅此链接https://sqa.stackexchange.com/questions/12866/how-fluentwait-is-different-from-webdriverwait

答案 1 :(得分:0)

取消弹出,而不是使用手动关闭图标。您可以通过驱动程序直接处理它,而无需等待显式等待。

driver.switchTo().alert().accept();

答案 2 :(得分:0)

您可以使用以下代码处理弹出窗口,而不是点击“x”图标 -

// Switching to Alert        
Alert alert = driver.switchTo().alert();        

// Accepting alert      
alert.dismiss();    

警报界面为我们提供了各种方法来处理弹出窗口。