每当测试导航到另一个页面时,是否必须创建新的Web驱动程序对象?

时间:2014-04-08 10:28:08

标签: javascript node.js testing selenium selenium-webdriver

这是我用来测试的代码,如果登录后,用户可以移动到另一个页面。但测试仍然失败,告诉我NoSuchElementError: no such element

var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();

driver.get('localhost:3012');
var loginForm = driver.findElement(webdriver.By.id('login'));
loginForm.findElement(webdriver.By.name('email')).sendKeys('abcd@abcd.com');
loginForm.findElement(webdriver.By.name('password')).sendKeys('1234');
loginForm.submit();

var waiting = false;
var finished = false;
driver.wait(function() {
    if (driver.findElement(webdriver.By.id('welcomeMsg')) !== null) {
        driver.findElement(webdriver.By.id('problemListHeading')).click();
        if (!waiting) {
            waiting = true;

            driver.wait(function() {
                if (driver.findElement(webdriver.By.id('problemList'))) {

                            finished = true;
                            return true;


                }
            });
        }
        return finished;
    }
}, 1000);

driver.quit();

以下是错误日志的一部分:

==== async task ====
WebDriver.findElement(By.id("problemList"))
    at webdriver.WebDriver.schedule (/media/Data1/Projects/Assignments/SE_Lab/ninja-store/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:267:15)

2 个答案:

答案 0 :(得分:0)

当你说导航到另一个页面时,它是否意味着一个新的浏览器?如果是这样,您可能需要使用以下代码段切换浏览器。

String winHandleBefore = driver.getWindowHandle();
        for(String winHandle : driver.getWindowHandles()){
            driver.switchTo().window(winHandle);
        }
driver.switchTo().window(winHandleBefore);

答案 1 :(得分:0)

如果没有找到该元素,Webdriver的findElement方法将抛出异常。请尝试使用isElementPresent。如下所示:

return driver.wait(function () {
    return driver.isElementPresent(webdriver.By.name('problemList'), 5000)
});