首页 文章

使WebDriver在没有ExpectedCondition的情况下等待

提问于
浏览
2

Java / Selenium WebDriver / Firefox

页面上有一个文本“输入”字段 . 然后在它下方有一个“提交”按钮 . 加载页面时,输入字段和“提交”按钮都已启用 . 在输入字段中输入文本后,有没有办法让WebDriver在单击“提交”按钮之前等待“x”秒,而不是立即单击它 . 我能看到的选项是Thread.sleep(x),我理解这不是一种有效的方法 . 另一个选项是使用没有预期条件的新WebDriverWait(驱动程序,'x')(因为此处没有预期条件,因为“提交”按钮已经可见且可单击) . 在这种情况下,这与使用Thread.sleep(x)相同吗?还有其他选择吗?

1 回答

  • 1

    Selenium waits旨在等待特定条件 . Implicit wait 正在等待元素存在于 driver.findElement() 中的DOM中,而 explicit wait 正在等待 ExpectedConditiontrue .

    但是,只要满足条件,代码就会继续,或者如果条件失败,则会抛出异常 .

    通过使用一些操作,您可以在没有线程的情况下使代码“休眠”

    WebDriverWait tempWait = new WebDriverWait(driver, 10); // define local/temp wait only for the "sleep"
    try {
        tempWait.until(ExpectedCondition); // condition you are certain won't be true
    }
    catch (TimeoutException) {
        continue; // catch the exception and continue the code
    }
    // continue the code
    

    这将导致代码模拟"sleep"持续10秒(代码将不会继续,但 tempWait.until 将在满足 ExpectedCondition 时重复检查) .

    这是肮脏的工作,甚至比 Thread.sleep() 效率更低 . 如果目的是等待一段时间,无论网络状况如何,我建议您使用 Thread.sleep() .

相关问题