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

如何在Java中让Selenium-WebDriver等待几秒钟?

濮阳和泰
2023-03-14
问题内容

我正在研究Java Selenium-WebDriver。我加了

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

WebElement textbox = driver.findElement(By.id("textbox"));

因为我的应用程序需要几秒钟来加载用户界面。所以我设置了2秒的隐式等待。但是我找不到元素文本框

然后我添加 Thread.sleep(2000);

现在工作正常。哪一个是更好的方法?


问题答案:

好吧,有两种类型的等待:显式和隐式等待。显式等待的想法是

WebDriverWait.until(condition-that-finds-the-element);

隐式等待的概念是

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

你可以在此处获得细节上的差异。

在这种情况下,我宁愿使用显式等待(fluentWait尤其是):

public WebElement fluentWait(final By locator) {
    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(30, TimeUnit.SECONDS)
            .pollingEvery(5, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class);

    WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return driver.findElement(locator);
        }
    });

    return  foo;
};

fluentWait函数返回找到的Web元素。从文档开始fluentWait: 等待接口的实现,可以动态配置其超时和轮询间隔。每个FluentWait实例都定义了等待条件的最长时间,以及检查条件的频率。此外,用户可以配置等待以在等待时忽略特定类型的异常,例如在页面上搜索元素时的NoSuchElementExceptions。 你可以在这里找到详细信息

fluentWait你的情况的用法如下:

WebElement textbox = fluentWait(By.id("textbox"));

恕我直言,这种方法更好,因为你不确切知道要等待多少时间,并且可以在轮询间隔中设置任意时间值,以验证哪个元素存在。问候。



 类似资料:
  • 我在做一个JavaSelenium-WebDriver 和 因为我的应用程序只需几秒钟就能加载用户界面。所以我设定了2秒的等待时间。但我找不到元素文本框 然后我添加

  • 问题内容: 我正在使用C#Selenium-WebDriver。发送密钥后,我要等待几秒钟。我执行以下代码以等待2秒钟。 我这样打电话: 它工作正常。哪一个是更好的方法? 问题答案: 我会不惜一切代价避免使用这样的方法,因为它会减慢测试速度,但是我遇到了我没有其他选择的情况。 总是最好以某种方式观察DOM,例如:

  • 问题内容: 是的,我知道这个问题经常被问到,但是我还是不明白。我想让Selenium等待,无论如何。我尝试了这些方法 和其他东西,但它不起作用。我需要selenium才能等待10秒。 NO 直到一些元素被加载或什么,只是等待10秒。我知道有这个 我不要那个 。 如果要花几秒钟(无法实现)等待selenium,那么其他(python)库/程序将能够完成此任务?使用Java Selenium似乎没有问

  • 我已经用C#启动了一个Selenium项目。试图等待页面完成加载,然后才进行下一个操作。 我的代码如下所示: 在LoginPage.SelectRole(TestCase.orgUnit)中: 我搜索元素RolehierachyLabel。我一直在尝试使用多种方法来等待页面加载或搜索允许一些超时的元素属性: 你将如何解决这个障碍?

  • 我尝试遵循return((JavascriptExecutor)driver.executescript(“return document.readystate”).equals(“complete”); 但它不起作用 基本上,上面的命令不能识别以下操作[testng]1535139249496 addons.productaddons信息发送请求到:https://aus5.mozilla.or

  • 问题内容: 我在用: 但是对于以下元素它仍然连续失败 我添加了等待代码: 隐式等待是否应该等到找到一个元素后再进行处理?如果我使用而不是我添加的代码,还会更好吗? 问题答案: TL; DR:始终使用显式等待。忘记隐式等待的存在。 以下是显式等待与隐式等待之间的区别的简要概述: 显式等待: 记录和定义的行为。 在硒的本地部分运行(以你的代码语言显示)。 可以在你能想到的任何条件下工作。 返回成功或超