nightwatch.js不适用于phantom.js

时间:2017-06-15 15:07:14

标签: phantomjs nightwatch.js

我已经使用nightwatch.js为我的产品自动化e2e测试用例。它在chrome,firefox和其他基于UI的浏览器上运行良好。但是,我需要在phantom.js上运行它来运行它作为无头浏览器的Jenkins的一部分。

我试过但测试脚本不能与phantom.js一起使用。

测试脚本:

describe('TEST PHANTOMJS#',function() {

  afterEach((client,done) => {
    client.end(() => done());
  });

  it('successful test google.com',(client)=> {

    // Launch google.com
    client.url('https://www.google.com').resizeWindow(1000,800);
    console.log('Launched Google')
    client.expect.element('body1').to.be.present.before(1000); // test error
    console.log('Completed testing')
  });
});

我的nightwatch.json配置:

{
  "src_folders": [
    "tests"
  ],
  "output_folder": "reports",
  "custom_commands_path": "",
  "custom_assertions_path": "",
  "page_objects_path": "",
  "selenium": {
    "start_process": true,
    "server_path": "./bin/selenium/selenium-server-standalone-3.0.1.jar",
    "log_path": "",
    "port": 4444,
    "cli_args": {
      "webdriver.chrome.driver": "./bin/chrome/chromedriver",
      "webdriver.gecko.driver": "./bin/firefox/geckodriver",
      "webdriver.edge.driver": "./bin/ie/IEDriverServer.exe"
    }
  },
  "test_settings": {
    "default": {
      "selenium_port": 4444,
      "selenium_host": "localhost",
      "default_path_prefix": "/wd/hub",
      "silent": true,
      "screenshots": {
        "enabled": true,
        "on_failure": true,
        "path": "./screen-shots"
      },
      "desiredCapabilities": {
        "browserName": "phantomjs",
        "javascriptEnabled": true,
        "acceptSslCerts": true,
        "phantomjs.binary.path": "./node_modules/phantomjs-prebuilt/bin/phantomjs",
        "phantomjs.page.settings.userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36",
        "phantomjs.cli.args": []
      },
      "test_runner": {
        "type": "mocha",
        "options": {
          "ui": "bdd",
          "reporter": "list"
        }
      }
    }
  }
}

运行./node_modules/.bin/nightwatch --env qa --verbose后,我看到了以下日志

> nightwatch --env qa --verbose

Starting selenium server... started - PID:  11037

    TEST PHANTOMJS# successful test google.com: Launched Google
Completed testing
INFO Request: POST /wd/hub/session 
 - data:  {"desiredCapabilities":{"browserName":"phantomjs","javascriptEnabled":true,"acceptSslCerts":true,"platform":"ANY","phantomjs.binary.path":"./node_modules/phantomjs-prebuilt/bin/phantomjs","phantomjs.page.settings.userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36","phantomjs.cli.args":[]}} 
 - headers:  {"Content-Type":"application/json; charset=utf-8","Content-Length":372}
INFO Response 200 POST /wd/hub/session (1409ms) { state: null,
  sessionId: 'd16c7439-18ec-4b67-85eb-e3dda6fe0075',
  hCode: 1253002783,
  value: 
   { applicationCacheEnabled: false,
     rotatable: false,
     handlesAlerts: false,
     databaseEnabled: false,
     version: '2.1.1',
     platform: 'MAC',
     browserConnectionEnabled: false,
     proxy: { proxyType: 'direct' },
     nativeEvents: true,
     acceptSslCerts: false,
     driverVersion: '1.2.0',
     'webdriver.remote.sessionid': 'd16c7439-18ec-4b67-85eb-e3dda6fe0075',
     'phantomjs.page.settings.userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
     locationContextEnabled: false,
     webStorageEnabled: false,
     browserName: 'phantomjs',
     takesScreenshot: true,
     driverName: 'ghostdriver',
     javascriptEnabled: true,
     cssSelectorsEnabled: true },
  class: 'org.openqa.selenium.remote.Response',
  status: 0 }
INFO Got sessionId from selenium d16c7439-18ec-4b67-85eb-e3dda6fe0075
INFO Request: POST /wd/hub/session/d16c7439-18ec-4b67-85eb-e3dda6fe0075/url 
 - data:  {"url":"https://www.google.com"} 
 - headers:  {"Content-Type":"application/json; charset=utf-8","Content-Length":32}

理想情况下,它应该通过报告错误来完成测试。然而,它被卡住了,并没有进一步发展。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

HTTPS 的网站上使用 PhantomJS 时,通常必须使用ignore-ssl-errors选项运行脚本。否则,您经常遇到麻烦...如果您的脚本适用于所有图形浏览器,但不适用于PhantomJS,则您的问题很可能与SSL / TLS有关。

在配置PhantomJS的nightwatch.json中,确保添加CLI选项:

"phantomjs.cli.args": ["--ignore-ssl-errors=true"]

如果没有该选项(它不打印页面标题),以下脚本不起作用,但是在添加它时它会起作用:

module.exports = {
  'PhantomJS': function(browser) {
    browser
      .url('https://www.google.com')
      .waitForElementVisible('body', 1000)
      .getTitle(function (title) {
        console.log(title);
      })
      .end();
  }
};