Search code examples
javascriptjsonselenium-chromedrivernightwatch.jsselenium-server

.waitForElementVisible is unresolved function in Nightwatch template project


I have followed steps from http://nightwatchjs.org/gettingstarted. And in my test file I have next code from 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();
        }
};

Also, this is how my package.json looks like.

{
  "name": "try_nw",
  "version": "1.0.0",
  "description": "try_nightwatch",
  "main": "nightwatch.js",
  "scripts": {
  "test": "node nightwatch -e chrome"
},
  "author": "",
  "license": "ISC",
"dependencies": {
  "bower": "^1.8.2",
  "chromedriver": "^2.34.0",
  "geckodriver": "^1.10.0",
  "nightwatch": "^0.9.19",
  "selenium-server-standalone-jar": "^3.8.1"
  }
}

And My nightwatch.json

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

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

"test_settings" : {
"default" : {
  "launch_url" : "http://localhost",
  "selenium_port"  : 4444,
  "selenium_host"  : "localhost",
  "silent": true,
  "screenshots" : {
    "enabled" : false,
    "path" : ""
  },
  "desiredCapabilities": {
    "browserName": "chrome",
    "javascriptEnabled": true,
    "acceptSslCerts": true,
    "chromeOptions" : {
      "args" : ["--no-sandbox", "--start-maximized", "--disable-infobars"]
  }
  }
},

"chrome" : {
  "desiredCapabilities": {
    "browserName": "chrome",
    "javascriptEnabled": true,
    "acceptSslCerts": true
  }
},

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

But, when I run the test, the blank tab of chrome opens and console shows next output.

Starting selenium server... started - PID:  15024

[Googletests] Test Suite
============================

Running:  Demo test Google

× Timed out while waiting for element <body> to be present for 1000 
  milliseconds.  - expected "visible" but got: "not found"

at Object.Demo test Google (E:\JS\Try_NW\tests\googletests.js:6:14)
at process._tickCallback (internal/process/next_tick.js:150:11)


FAILED:  1 assertions failed (5.972s)

 _________________________________________________

 TEST FAILURE:  1 assertions failed, 0 passed. (6.088s)

 × googletests

- Demo test Google (5.972s)
Timed out while waiting for element <body> to be present for 1000 milliseconds.  - expected "visible" but got: "not found"
   at Object.Demo test Google (E:\JS\Try_NW\tests\googletests.js:6:14)
   at process._tickCallback (internal/process/next_tick.js:150:11)


 Process finished with exit code 1

So, <.waitForElementVisible> is not defined. Can anybody suggest a decision?


Solution

  • The problem you're experiencing is not the waitForElement, or anything else with your script per sae. The setValue right before that works differently with chromeDriver and your browser. Thats why you're seeing a tab open up and why the error message is about not finding the body element.

    If you update chromedriver you should be able to get your script to work.

    https://sqa.stackexchange.com/questions/30150/chrome-62-sendkeys-seems-to-be-causing-chrome-settings-help-to-open