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

Javascript 每当测试导航到另一个页面时,我是否必须创建一个新的web驱动程序对象?,javascript,node.js,testing,selenium,selenium-webdriver,Javascript,Node.js,Testing,Selenium,Selenium Webdriver,这是我用来测试用户登录后是否能够移动到另一个页面的代码。但是测试一直失败,告诉我NoSuchElementError:没有这样的元素 var webdriver = require('selenium-webdriver'); var driver = new webdriver.Builder(). withCapabilities(webdriver.Capabilities.chrome()). build(); driver.get('localhost:3012');

这是我用来测试用户登录后是否能够移动到另一个页面的代码。但是测试一直失败,告诉我
NoSuchElementError:没有这样的元素

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)

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

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

Webdriver的
findElement
方法如果找不到元素,将抛出异常。尝试改用
isElementPresent
。比如:

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

您确定元素已加载到DOM中吗?此外,检查图元是否不在框架/iframe内。如果可能,请发布HTML代码。否。一种常见的策略是实现页面对象模型,通过该模型,您可以在各种页面对象周围传递
驱动程序
实例。(虽然我对WebDriverJS库不太了解,但这样做可能会更困难)。不,不是新浏览器。当我点击超链接时,只是一个不同的页面。