nightwatch.js browser.url是未定义的(或者client.url是未定义的)与selenium

时间:2018-03-12 19:41:09

标签: selenium-webdriver nightwatch.js

我试图让nightwatch调用browser.url('http://www.google.com')函数调用,但它是未定义的(以下代码来自http://nightwatchjs.org/guide的官方文档)

module.exports = {
    'Demo test Google' : function (browser) {
        browser
          .url('http://www.google.com')
          .waitForElementVisible('body', 1000)
          .setValue('input[type=text]', 'nightwatch')
          .waitForElementVisible('button[name=btnG]', 1000)
          .click('button[name=btnG]')
          .pause(1000)
          .assert.containsText('#main', 'Night Watch')
          .end();
     }
};

我设置的项目更简单,但我的问题是nightwatch.js中提到的任何browser个参数的文档都是未定义的

如果我这样做

console.log(JSON.stringify(browser))

我明白了:

{"capabilities":{},"globals":{},"sessionId":null,"options":{"screenshots":false,"skip_testcases_on_fail":false,"log_screenshot_data":true,"desiredCapabilities":{"browserName":"internet explorer","javascriptEnabled":true,"acceptSslCerts":true,"platform":"ANY","marionette":true,"name":"MARSBPCHART"}},"launchUrl":"http://localhost","launch_url":"http://localhost","Keys":{"NULL":"","CANCEL":"","HELP":"","BACK_SPACE":"","TAB":"","CLEAR":"","RETURN":"","ENTER":"","SHIFT":"","CONTROL":"","ALT":"","PAUSE":"","ESCAPE":"","SPACE":"","PAGEUP":"","PAGEDOWN":"","END":"","HOME":"","LEFT_ARROW":"","UP_ARROW":"","RIGHT_ARROW":"","DOWN_ARROW":"","ARROW_LEFT":"","ARROW_UP":"","ARROW_RIGHT":"","ARROW_DOWN":"","INSERT":"","DELETE":"","SEMICOLON":"","EQUALS":"","NUMPAD0":"","NUMPAD1":"","NUMPAD2":"","NUMPAD3":"","NUMPAD4":"","NUMPAD5":"","NUMPAD6":"","NUMPAD7":"","NUMPAD8":"","NUMPAD9":"","MULTIPLY":"","ADD":"","SEPARATOR":"","SUBTRACT":"","DECIMAL":"","DIVIDE":"","F1":"","F2":"","F3":"","F4":"","F5":"","F6":"","F7":"","F8":"","F9":"","F10":"","F11":"","F12":"","COMMAND":"","META":""},"assert":{},"currentTest":{"name":"Demo test Google","module":"MARSBPCHART","results":{"steps":[],"passed":0,"failed":0,"errors":0,"skipped":0,"tests":0,"testcases":{},"timestamp":"Mon, 12 Mar 2018 18:00:40 GMT","time":0},"group":""}}

我试图通过在我的根目录中创建一个pages/文件夹来设置pageObjects工作,在那里我试图定义url方法/函数但是我不太确定我是不是应该创建此方法/函数来调用的人,或者如果nightwatch.js的底层库为我创建这个

browser.navigate对我来说也是未定义的。

再次,这是我需要自己实现的还是已经包含在守夜人中了?

下面是我的nightwatch.json文件:

{
  "src_folders" : ["./tests"],
  "output_folder" : "reports",
  "custom_commands_path" : "",
  "custom_assertions_path" : "",
  "page_objects_path" : "./pages",
  "globals_path" : "",

  "selenium" : {
    "start_process" : false,
    "start_session": false,
    "server_path" : "./bin/selenium-server-standalone-3.9.1.jar",
    "log_path" : "",
    "port" : 4444,
    "cli_args" : {
      "webdriver.chrome.driver" : "",
      "webdriver.gecko.driver" : "",
      "webdriver.edge.driver" : "./bin/MicrosoftWebDriver.exe"
    }
  },

  "test_settings" : {
    "default" : {
      "launch_url" : "http://localhost",
      "selenium_port"  : 4444,
      "selenium_host"  : "localhost",
      "silent": true,
      "screenshots" : {
        "enabled" : false,
        "path" : ""
      },
      "desiredCapabilities": {
        "browserName": "internet explorer",
        "marionette": true,
        "javascriptEnabled": true
      }
    },

    "chrome" : {
      "desiredCapabilities": {
        "browserName": "chrome"
      }
    },

    "edge" : {
      "desiredCapabilities": {
        "browserName": "MicrosoftEdge"
      }
    }
  }
}

这是我的测试/ MARSBPCHART.js文件:

var searchCommands = {
    submit: function () {
        this.waitForElementVisible('@submitButton', 3000)
            .click('@submitButton')
            .api.pause(1000);
        return this; // Return page object for chaining
    }
};

module.exports = {
    testMe: function()  {
        console.log('in testMe')
    },
    url: 'http://google.com',
    commands: [searchCommands],
    elements: {
        searchBar: { selector: 'input[name=q]' },
        submitButton: { selector: '[type=submit]' }
    },
    page: function() {
        console.log('in page of MARSBPCHARTPage');

    },
    MARSBPCHART: function() {

        console.log('in MARSBPCHARTPage.js\' this.MARSBPCHARTPage')
    }
};

这是整个项目:

https://github.com/cotyembry/UITests

编辑1:我没有提到我在另一个终端窗口中手动运行java -jar ./bin/selenium-server-standalone-3.9.1.jar

感谢您的所有时间和帮助,我真的很感激

1 个答案:

答案 0 :(得分:2)

这是因为您没有启动selenium进程和会话。我所做的只是复制你的代码和配置,并将start_processstart_session的值切换为true,它开始工作。您的测试还有其他问题,但我确实让它运行。要让browser.url().navigate()工作,您需要启动selenium流程和会话。您可以手动执行此操作,也可以将配置中的这些值设置为true

enter image description here