在.url()调用之后没有任何反应

时间:2016-11-03 00:50:09

标签: selenium-chromedriver nightwatch.js macos-sierra

我有以下的守夜人测试:

module.exports = {

    'Set Initial Dataset' : function (browser) {

        browser
          .url('http://localhost/nightwatch/load-initial-dataset')
          .end()

    }

}

当我执行它时,浏览器被打开并且加载了URL,但是当加载结束时,它不会关闭浏览器以开始下一个测试。

测试工作1个月前...我将夜视仪更新到了nigthwatch最新版本(v0.9.8),下载了selenium-server-standalone-3.0.1.jar,chromedriver 2.25和Chrome 54.0.2840.87

我的Nigthwatch.js是

module.exports = {

src_folders: ['./tests'],
output_folder: './results',

selenium: {

    start_process: true,
    server_path: './selenium-server-standalone-3.0.1.jar',
    log_path: './results',
    host: '127.0.0.1',
    port: 4444,
    "cli_args" : {
        "webdriver.chrome.driver" : "./osx/chromedriver"
    }

},

test_settings: {

    default: {

        waitForConditionPollInterval: 1,
        selenium_host: '127.0.0.1',
        selenium_port: 4444,
        screenshots: {

            enabled: true,
            path: './results/screenshots'

        },
        desiredCapabilities: {

            browserName: 'chrome',
            javascriptEnabled: true,
            acceptSslCerts: true

        }

    }

}

};

我尝试启动此测试并遇到同样的问题:https://github.com/nightwatchjs/nightwatch/blob/master/examples/tests/google.js(浏览器在网址上保持打开状态,终端没有任何内容)

当我使用safari进行测试时,我没有特别的问题。

THX

2 个答案:

答案 0 :(得分:1)

乍一看,您的测试看起来并没有真正执行任何断言,因此实际上并没有“测试”。为了任何东西。这可能会使测试运行员感到困惑。

我的另一个理论是waitForConditionPollInterval设置太低了。 1毫秒似乎有点矫枉过正。

从这里可以做两件事:

  1. 在测试中执行实际断言。例如,导航到页面后试试这个......
  2. 示例:

    module.exports = {
        'Set Initial Dataset' : function (browser) {
        browser
           .url('http://localhost/nightwatch/load-initial-dataset')
           .assert.title('Some Title')
           .end()
        }
    }
    
    1. 删除waitForConditionPollInterval设置,看看是否有帮助。如果确实如此,请尝试将其设置为更加理智,例如100毫秒,并检查测试是否仍然挂起。

答案 1 :(得分:0)

我的经验是,在未执行验证时,selenium会挂起。您没有获得任何输出,因为导航不是"验证"步。

虽然您可以检查页面标题以确认您已经点击了正确的网址,但我认为这有点脆弱。如果页面标题因任何原因发生更改,即使您导航到的网址正确,也会导致测试失败。要测试您是否正在使用正确的网址,请尝试使用.urlContains();

示例:

module.exports = {

    'Set Initial Dataset' : function (browser) {

        browser
          .url('http://localhost/nightwatch/load-initial-dataset')
          .verify.urlContains('/load-initial-dataset')
          .end();

    }

}

您在.end();之后也错过了分号,这可能不会告诉守夜人测试用例实际上是完整的。

也许也试试。