我最近开始开发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 。任何解决问题的建议都将不胜感激。
答案 0 :(得分:1)
隐含等待
隐式等待告诉WebDriver轮询DOM一定数量 尝试不立即找到任何元素(或元素)的时间 可用。默认设置为0.设置后,隐式等待为 为WebDriver对象的生命设置。
在您的代码中:
driver.manage().timeouts().implicitlyWait(10000);
driver.get('https://url/#/report/advanced-options');
你很简单地调用get,而不试图找到任何元素。
显式等待是您定义的等待某个条件的代码 在进一步执行代码之前发生。极端的情况 这是time.sleep(),它将条件设置为精确的时间段 等待。有一些方便的方法可以帮助您 编写只会在需要时等待的代码。 WebDriver等待 与ExpectedCondition的结合是一种可行的方式 来完成的。
网站上的例子非常明确。
因此,在您登录后,您可以等待(到expected condition)您的DOM中必须“出现”的内容,然后再致电:
driver.get('https://url/#/report/advanced-options');