如果我在Nightwatch框架中测试失败,如何关闭浏览器实例

时间:2018-01-09 17:21:33

标签: selenium selenium-webdriver protractor nightwatch.js browser-automation

我想在测试场景失败时关闭浏览器实例, 目前的问题是我的测试执行进行到下一个场景,因为我的最后一个窗口仍然在寻找定位器等,甚至我的下一个场景都失败了。

如果我的测试场景在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"]
    }
  },
},

3 个答案:

答案 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);
    }
};

让我知道它是否适合你。