我最近开始开发 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在等待之前执行。任何解决该问题的建议将不胜感激。
根据文档:
隐式等待:
隐式等待告诉 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');
今天的语法是:
await driver.manage().setTimeouts({ implicit: TIMEOUT, pageLoad:
TIMEOUT, script: TIMEOUT });