Selenium WebDriver 隐式等待

问题描述 投票:0回答:2

我最近开始开发 selenium javascript webdriver。我想要实现的目标是登录到网站,然后导航到不同的页面。以下是我的代码片段。

var checkPaymentStatus = function () {
    var driver = new webdriver.Builder().forBrowser('chrome').build();
    driver.get('https://url/#/login');
    driver.findElement(By.name('username')).sendKeys('user');
    driver.findElement(By.name('password')).sendKeys('pass');
    driver.findElement(By.name('loginForm')).submit();
    driver.manage().timeouts().implicitlyWait(10000);
    driver.get('https://url/#/report/advanced-options');
};

上面的代码在登录之前按预期工作,但问题是当我尝试导航到 report/advanced-options 时,我总是遇到未经身份验证的错误,并且似乎隐式等待不起作用或 driver.get在等待之前执行。任何解决该问题的建议将不胜感激。

javascript selenium selenium-webdriver
2个回答
1
投票

根据文档

隐式等待:

隐式等待告诉 WebDriver 轮询 DOM 以获得一定数量 尝试不立即查找任何元素(或多个元素)时的时间 可用的。默认设置为 0。设置后,隐式等待为 设置为 WebDriver 对象的生命周期。

在您的代码中:

driver.manage().timeouts().implicitlyWait(10000);
driver.get('https://url/#/report/advanced-options');

您只需调用 get,无需尝试查找任何元素。

随着显式等待

显式等待是您定义的等待特定条件的代码 在进一步处理代码之前发生。极端的情况是 这是 time.sleep(),它将条件设置为精确的时间段 等待。提供了一些方便的方法来帮助您 编写只等待所需时间的代码。 WebDriver等待 与 ExpectedCondition 结合是一种方法 完成了。

网站上的例子非常有解释性。

因此,登录后,您可以等待(达到预期条件)某些必须“出现”在 DOM 中的内容,然后再调用:

driver.get('https://url/#/report/advanced-options');

0
投票

今天的语法是:

await driver.manage().setTimeouts({ implicit: TIMEOUT, pageLoad:
            TIMEOUT, script: TIMEOUT });
© www.soinside.com 2019 - 2024. All rights reserved.