.waitForElementVisible — неразрешенная функция в проекте шаблона Nightwatch.

Я выполнил шаги с http://nightwatchjs.org/gettingstarted. И в моем тестовом файле у меня есть следующий код из 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();
        }
};

Кроме того, вот как выглядит мой package.json.

{
  "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"
  }
}

И мой ночной дозор.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"
   }
  }
 }
}

Но когда я запускаю тест, открывается пустая вкладка Chrome, и в консоли отображается следующий вывод.

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

Итак, ‹.waitForElementVisible> не определено. Кто-нибудь может предложить решение?


person Oleh H    schedule 25.12.2017    source источник
comment
Где сказано, что waitForElementVisible не был определен? о_О   -  person Tomalak    schedule 25.12.2017
comment
@Tomalak WebStorm подчеркивает это и говорит: «Неразрешенная функция или метод vaitForElementVisible()».   -  person Oleh H    schedule 26.12.2017
comment
Я думаю, вам нужно увеличить тайм-ауты. Я просто скопировал ваш тест, и первый waitForElementVisible() работал нормально. Он взорвался на том, который ищет кнопку, когда я его запускал.   -  person tehbeardedone    schedule 26.12.2017
comment
@OlehH Это не твой сценарий. Это Хромдрайвер. Смотрите мой ответ ниже.   -  person QualiT    schedule 27.12.2017


Ответы (2)


Проблема, с которой вы столкнулись, связана не с waitForElement или чем-то еще с вашим скриптом как таковым. Прямо перед этим setValue работает по-разному с chromeDriver и вашим браузером. Вот почему вы видите, что вкладка открывается, и почему сообщение об ошибке говорит о том, что элемент body не найден.

Если вы обновите chromedriver, вы сможете заставить свой скрипт работать.

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

person QualiT    schedule 27.12.2017
comment
Спасибо за предложение! Я запускаю его в FireFox, и он работает! Не знаю, почему это не работает с хромом. Я изменил следующие строки ["webdriver.gecko.driver" : "bin/geckodriver.exe",, "desiredCapabilities": {"browserName": "firefox", "javascriptEnabled": true, "acceptSslCerts": true }] - person Oleh H; 29.12.2017
comment
Вероятно, это ошибка с chromedriver github.com/nightwatchjs/nightwatch/issues/1329 - person Oleh H; 29.12.2017

Есть что-то еще, что заставляет ваш тест провалиться. Я смог запустить ваш тест с тем же тайм-аутом 1000 ms, и он прошел нормально с небольшой модификацией. Возможно, вы захотите попробовать увеличить время ожидания waitForElementVisible(). Следующий тест прошел для меня без проблем.

browser
  .url('http://www.google.com')
  .waitForElementVisible('body', 1000)
  .setValue('input[type=text]', ['nightwatch', browser.Keys.ENTER])
  .pause(1000)
  .assert.containsText('#main', 'Night Watch')
  .end();      
}
person tehbeardedone    schedule 26.12.2017
comment
Я уже пытался увеличить время ожидания, но безуспешно. Страница по-прежнему пуста. - person Oleh H; 29.12.2017