我想在测试场景失败时关闭浏览器实例, 目前的问题是我的测试执行进行到下一个场景,因为我的最后一个窗口仍然在寻找定位器等,甚至我的下一个场景都失败了。
如果我的测试场景在Nightwatch中失败,有没有办法可以关闭浏览器窗口?
test_settings:{
default: {
launch_url: 'http://localhost',
page_objects_path: './e2e-nightwatch/ionic/objects',
selenium_host: '127.0.0.1',
selenium_port: 4444,
request_timeout_options: {
timeout: 7000,
retry_attempts: 5
},
end_session_on_fail:true,
skip_testcases_on_fail:true,
disable_colors: false,
screenshots: {
enabled: true,
on_failure: true,
on_error: true,
path: './e2e-nightwatch/ionic/screenshots'
},
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true,
"chromeOptions": {
"args": ["start-maximized"]
}
},
},
答案 0 :(得分:0)
Driver.Dispose();
关闭浏览器。
答案 1 :(得分:0)
是的,您可以使用skip_testcases_on_fail
。在您的配置中添加
skip_testcases_on_fail: true
这将完成当前测试步骤,然后在执行任何其他步骤之前退出。您可以查看完整的测试设置列表here。
您也可以使用end_session_on_fail
。取决于你希望它如何工作。
答案 2 :(得分:0)
您可能观察到的不是failure
而是error
(讲夜间守护语言)。这可能是执行错误,异常或类似的东西:
错误:无法使用:css selector
找到元素:“#someElement”
这不被视为失败(失败实际上意味着断言失败),因此skip_testcases_on_fail
选项不会产生任何影响(顺便说一句:默认情况下此选项设置为true
。
有两种方法可以解决这个问题。
首先(首选):
在对元素执行任何操作之前,例如执行.click('#someElement')
,最好的做法是在同一个选择器上运行断言:
// fails immediately if element is not present
browser.assert.elementPresent('#someElement')
// wait for element to be present for specified time in ms
browser.waitForElementPresent('#someElement', 2000)
如果元素不存在,两种方法都将停止执行测试运行。
<强>第二强>
如果您由于某种原因不想使用第一种方法或只是好奇,还有另一种方法可以停止执行整个测试运行。
在测试用例中,您可以定义在每个测试用例完成后触发的afterEach
函数。在此函数中,您可以访问包含当前测试运行的统计信息的对象。您可以做的只是检查错误计数是否大于0并将错误传递给done()
回调,这将导致整个测试运行中断:
module.exports = {
'Test case #1': function(browser) {},
afterEach: function(browser, done) {
done(browser.currentTest.results.errors ? new Error('Errors occured during the last test run') : null);
}
};
让我知道它是否适合你。