Selenium WebDriver含蓄地等

时间:2017-11-12 05:39:10

标签: javascript selenium selenium-webdriver

我最近开始开发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');
};

以上代码在登录之前按预期工作但问题是我在尝试导航到报告/高级选项时总是没有经过身份验证的错误,似乎隐含等待不是在等待之前执行工作或 driver.get 。任何解决问题的建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

根据documentation

隐含等待

  

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

在您的代码中:

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

你很简单地调用get,而不试图找到任何元素。

使用explicit waits

  

显式等待是您定义的等待某个条件的代码   在进一步执行代码之前发生。极端的情况   这是time.sleep(),它将条件设置为精确的时间段   等待。有一些方便的方法可以帮助您   编写只会在需要时等待的代码。 WebDriver等待   与ExpectedCondition的结合是一种可行的方式   来完成的。

网站上的例子非常明确。

因此,在您登录后,您可以等待(到expected condition)您的DOM中必须“出现”的内容,然后再致电:

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