Webdriver.io вылетает с NoSessionIdError

Я пытаюсь заставить webdriver.io и Жасмин работать.

Следуя их примеру, мой скрипт находится по адресу test/specs/first/test2.js (в соответствии с конфигурацией) и содержит:

var webdriverio = require('webdriverio');


describe('my webdriverio tests', function() {

    var client = {};
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 9999999;

    beforeEach(function() {
        client = webdriverio.remote({ desiredCapabilities: {browserName: 'firefox'} });
        client.init();
    });

    it('test it', function(done) {
        client
            .url("http://localhost:3000/")
            .waitForVisible("h2.btn.btn-primary")
            .click("h2.btn.btn-primary")
            .waitForVisible("h2.btn.btn-primary")
            .call(done);
    });

    afterEach(function(done) {
        client.end(done);
    });
});

Я использую wdio в качестве средства запуска тестов и настраиваю его с помощью интерактивной настройки. Этот конфиг генерируется автоматически и все довольно просто, поэтому я не вижу необходимости его публиковать.

В другом окне терминала я запускаю selenium-server-andalone-2.47.1.jar с Java 7. На моем компьютере установлен Firefox (он пусто запускается при запуске теста), и на моем компьютере установлена ​​ОС 10.10. 5.

Вот что происходит, когда я запускаю тестовый бегун:

$ wdio wdio.conf.js 


=======================================================================================
Selenium 2.0/webdriver protocol bindings implementation with helper commands in nodejs.
For a complete list of commands, visit http://webdriver.io/docs.html. 
=======================================================================================

[18:17:22]:  SET SESSION ID 46731149-79aa-412e-b9b5-3d32e75dbc8d
[18:17:22]:  RESULT      {"platform":"MAC","javascriptEnabled":true,"acceptSslCerts":true,"browserName":"firefox","rotatable":false,"locationContextEnabled":true,"webdriver.remote.sessionid":"46731149-79aa-412e-b9b5-3d32e75dbc8d","version":"40.0.3","databaseEnabled":true,"cssSelectorsEnabled":true,"handlesAlerts":true,"webStorageEnabled":true,"nativeEvents":false,"applicationCacheEnabled":true,"takesScreenshot":true}
NoSessionIdError: A session id is required for this command but wasn't found in the response payload 
    at waitForVisible("h2.btn.btn-primary") - test2.js:21:14 

/usr/local/lib/node_modules/webdriverio/node_modules/q/q.js:141
                throw e;
                      ^
NoSessionIdError: A session id is required for this command but wasn't found in the response payload



0 passing (3.90s)


$

Я нахожу это очень странным и необъяснимым, особенно если учесть, что он даже печатает идентификатор сеанса.

Любые идеи?


person Travis    schedule 11.09.2015    source источник


Ответы (2)


Пожалуйста, ознакомьтесь с документами по средству запуска тестов wdio. Вам не нужно создавать экземпляр с помощью init самостоятельно. Средство запуска тестов wdio позаботится о создании и завершении сеанса за вас.

В вашем примере рассматривается автономное использование WebdriverIO (без testrunner). Вы можете найти примеры использования wdio здесь.

Чтобы уточнить это: есть два способа использования WebdriverIO. Вы можете встроить его в свою тестовую систему самостоятельно (используя его как отдельный файл или как скрейпер). Затем вам нужно позаботиться о таких вещах, как создание и завершение экземпляра или запуск их параллельно. Другой способ использования WebdriverIO — использовать средство запуска тестов, называемое wdio. Тестраннер берет файл конфигурации с кучей информации о вашей тестовой настройке и порождает экземпляры, обновляет информацию о заданиях в Sauce Labs и так далее.

person ChristianB    schedule 14.09.2015
comment
Ты прав. Я смотрел на отдельные примеры вместо примеров wdio. - person Travis; 16.09.2015

Каждая команда Webdriver выполняется асинхронно. Вы правильно вызвали обратный вызов done в afterEach и в тесте test it, но забыли сделать это в beforeEach:

beforeEach(function(done) {
    client = webdriverio.remote({ desiredCapabilities: {browserName: 'firefox'} });
    client.init(done);
});
person mucaho    schedule 30.11.2015