当前位置: 首页 > 面试题库 >

在Selenium Webdriver中,ExpectedCondition.elementToBeClickable不会等到进度条消失

蒯宏达
2023-03-14
问题内容

这个问题类似于下面的问题:
即如何等待进度条消失。
如何动态等待进度条完全加载到Selenium
Webdriver中?

我的情况有些不同。在我的方案中,进度条出现时,所有元素都被禁用。我正在使用显式等待,但仍收到异常

场景:
在“注册”页面中提供所有详细信息之后,脚本单击“创建帐户”按钮。此时会出现一个圆形进度条,它会持续1或2秒钟。如果输入的密码无效,则会在“注册”页面顶部显示错误消息。我现在需要单击“取消”按钮并重复该过程。

当进度条出现时,整个页面将被禁用。用户只有在进度条消失后才能继续。

这是我的代码:

WebDriverWait myWaitVar = new WebDriverWait(driver,20);

单击“创建帐户”按钮后,将显示进度栏。代码现在应该等待,直到出现“取消”按钮。

//Click on the "Create Account" button.
driver.findElement(By.id("createAccount")).click();

//Wait till the "Cancel" button shows up -- this may take some time.
myWaitVar.until(ExpectedConditions.elementToBeClickable (By.id("cancelRegister")));

//Click on the "Cancel" button.
driver.findElement(By.id("cancelRegister")).click();

当我执行上面的代码时,我总是到达NoSuchElementException最后一行。

我尝试过,ExpectedCondition.visibilityOfElement()但这也会产生效果NoSuchElementException

我可以使其正常工作的唯一方法是强制其进入睡眠状态:

Thread.sleep(3000);

该脚本与睡眠正常工作。

为什么不WebDriverWait等到进度条消失?该代码成功解析了,elementToBeClickable()但是单击“取消”按钮时,它始终会引发异常。


问题答案:

ExpectedConditions.elementToBeClickable
如果condition为true则返回元素,这意味着如果元素出现在页面上并且是可单击的,则返回元素,无需再次查找此元素,只需省略最后一行,如下所示:-

//Click on Create Account btn:
driver.findElement(By.id("createAccount")).click();

//Wait till "Cancel" button is showing up. At cases, it may take some time.
WebElement el = myWaitVar.until(ExpectedConditions.elementToBeClickable(By.id("cancelRegister")));
el.click();

Edited1 :-如果由于其他元素而无法单击,则可以JavascriptExecutor单击以执行单击,如下所示:

//Click on Create Account btn:
driver.findElement(By.id("createAccount")).click();

//Wait till "Cancel" button is showing up. At cases, it may take some time.
WebElement el = myWaitVar.until(ExpectedConditions.elementToBeClickable(By.id("cancelRegister")));
((JavascriptExecutor)driver).executeScript("arguments[0].click()", el);

Edited2
:-从提供的异常看来,进度栏仍覆盖在cancelRegister按钮上。因此最好的方法是先等待进度条的隐身性,然后等待cancelRegister按钮的可见性,如下所示:

//Click on Create Account btn:
driver.findElement(By.id("createAccount")).click();

//Now wait for invisibility of progress bar first 
myWaitVar.until(ExpectedConditions.invisibilityOfElementLocated(By.id("page_loader")));

//Now wait till "Cancel" button is showing up. At cases, it may take some time.
WebElement el = myWaitVar.until(ExpectedConditions.elementToBeClickable(By.id("cancelRegister")));
el.click();

希望它能工作… :)



 类似资料:
  • 这个问题与下面的问题类似: 即如何等待进度条消失。 如何在Selenium WebDriver中动态等待进度条完全加载? 我的情况有点不同。在我的场景中,当进度条出现时,所有元素都被禁用。我正在使用显式等待,但仍然得到异常。 方案:在“注册”页中提供所有详细信息后,脚本单击“创建帐户”按钮。此时将出现一个圆形进度条,并持续1或2秒。如果输入的密码无效,则错误消息将显示在注册页面的顶部。我现在需要点

  • 我的kivy应用程序中有一个ProgressBar。我相信我需要使用,以确保从循环内部更新进度条。 以下代码是用于再现性目的的淡化版本。 ProgressBar类 主要类别: KV文件 此示例显示loading_pb.value按钮单击后代码循环时发生的变化。 进步吧。价值印刷输出 问题进度条的值似乎确实如预期的那样递增,但实际进度条直到循环结束时才立即改变。 相关的 无法更新kivy进度条 ki

  • 我正在通过企业分发开发和分发iPad应用程序。他们下载并执行得很好,所以一切都正常(网络链接、ipa文件、plist文件、供应…)。 “问题”是当用户点击链接下载时,iPad中显示下载进度的进度条上写着“等待…”,但是空的,从不改变。当它完成时,它变为“安装…”,然后它正确地显示安装进度。 对于小型应用程序,这并不是真正的问题,但对于大型应用程序,它会让用户认为什么都没有发生。 有没有办法显示下载

  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点

  • 当我的数据从启动屏幕的数据库加载时,我正在使用进度条(圆圈)。我使用了xml中的进度条,使用了它的标记。。。但在活动中,它并不旋转。。。建议帮助。。怎么了?

  • 我如何去除灰色背景,只在进度条中显示蓝色进度条。