Одновременное управление двумя браузерами с помощью WebDriver или WebDriverJS.

Я планирую протестировать простое веб-приложение в реальном времени. Это приложение написано на JavaScript и показывает «статус присутствия» вошедшего в систему пользователя. Если userA регистрируется, его статус изменяется с «Неактивный» на «Активный». Это действие распространяется на всех других пользователей, которые вошли в приложение. Вошедший в систему пользователь B показывает в реальном времени присутствие пользователя A для изменения.

Я хотел бы проверить этот сценарий. Обработчик тестов открывает один браузер, выполняет действие записи, и в то же время обновляется второй браузер.

Какие инструменты доступны? Можно ли это сделать с помощью WebDriver/WebDriverJs? Могу ли я иметь два потока/сеанса, обрабатываемых через WebDriver? Есть примеры?


person cateof    schedule 23.10.2013    source источник
comment
Вы не можете использовать два экземпляра веб-драйвера? Я знаю, что это был бы самый простой способ разрешить эту ситуацию, но, очевидно, он не всегда самый подходящий.   -  person Mark Rowlands    schedule 23.10.2013
comment
@MarkRowlands В основном я спрашиваю, возможно ли это как-то. Код еще не написан.   -  person cateof    schedule 23.10.2013
comment
Лично мне всякий раз, когда мне нужно было выполнить подобный тест, я выбирал простой способ и просто создавал экземпляр второго экземпляра браузера. Так, например, firstDriver.findElement(By.id("doAction")).click(); assertTrue(secondDriver.findElement(By.id("resultOfAction")).isVisible());   -  person Mark Rowlands    schedule 23.10.2013
comment
есть примеры? учебники? книги? код?   -  person cateof    schedule 23.10.2013
comment
Собираетесь ли вы использовать тестовую среду? Или это все еще обсуждается?   -  person Nathan Merrill    schedule 23.10.2013
comment
Я планировал поэкспериментировать с WebDriverJs   -  person cateof    schedule 23.10.2013
comment
Я никогда не использовал webbdriverJS сам, но быстрое чтение документации показывает, что вам не нужно использовать два отдельных экземпляра браузера - использование Flows выглядит так, как будто они могут быть решением вашей проблемы. Я не очень хорошо разбираюсь в Javascript, поэтому на этом этапе мне придется уйти, извините.   -  person Mark Rowlands    schedule 23.10.2013


Ответы (4)


Вы можете сделать это с помощью WebDriver, но если вы хотите запустить оба браузера на одном компьютере, лучше всего использовать разные браузеры, чтобы у вас было два разных сеанса.

Поэтому попробуйте использовать ChromeDriver и FirefoxDriver, и у вас будет два разных сеанса для тестирования вашего приложения.

person Sergio Cazzolato    schedule 23.10.2013
comment
Приложение работает только в Chrome. Можно ли использовать два или более экземпляра/сеанса одного и того же драйвера? Есть ли код, которым можно поделиться, чтобы начать экспериментировать? - person cateof; 23.10.2013

Для этого вы можете использовать WebdriverJS. Просто создайте два экземпляра Webdriver и перемещайтесь по ним, например:

var WebdriverJS = require('webdriverjs'),
    assert      = require('assert'),

browser1 = new WebdriverJS({
    desiredCapabilities: {browserName:'chrome'}
}).init().url('http://github.com'),

browser2 = new WebdriverJS({
    desiredCapabilities: {browserName:'chrome'}
}).init().url('http://github.com');

browser1
    .setValue('#js-command-bar-field',['webdriverjs','Enter'])
    .getText('.sort-bar h3',function(err,text) {
        assert(text.indexOf('found 24 repository results') >= 0);
    })
    .end();


browser2
    .setValue('#js-command-bar-field',['linux','Enter'])
    .getText('.sort-bar h3',function(err,text) {
        assert(text.indexOf('We\'ve found 22,466 repository results') >= 0);
    })
    .end();

Два окна Chrome откроются и будут выполнять ваши инструкции независимо.

person ChristianB    schedule 08.01.2014
comment
Создаст ли это 2 экземпляра Chrome с изолированными хранилищами файлов cookie? - person Dziamid; 15.01.2015
comment
Как я могу переключаться между браузерами, чтобы иметь возможность видеть, что происходит в одном или другом? - person Dziamid; 15.01.2015
comment
@Dziamid, это мой старый пост. WebdriverJS уже устарел и теперь называется WebdriverIO (webdriver.io). На следующей неделе он получит функцию мультибраузерности, и вы сможете работать с несколькими браузерами одновременно. Тогда тестирование приложений, таких как чаты или приложения WebRTC, будет довольно простым. - person ChristianB; 16.01.2015
comment
Рад это слышать! Я использовал webdriver.io в своем последнем проекте, и мне не хватало возможности переключаться между браузерами. - person Dziamid; 17.01.2015

В более поздних версиях WebDriver.js все асинхронные операции управляются в потоках управления. Поскольку поток управления сериализует все операции в правильном порядке, простого создания нескольких экземпляров драйвера может быть недостаточно. Все операции с одним драйвером будут выполняться до операций с другим.

Для истинного распараллеливания создайте несколько потоков управления. Вот выдержка из документации https://code.google.com/p/selenium/wiki/WebDriverJs#Defining_Multiple_Flows:

var terms = [
   'javascript',
   'selenium',
   'webdriver'
];

var flows = terms.map(function(term) {
 return webdriver.promise.createFlow(function() {
   var driver = new webdriver.Builder().build();

   driver.get('http://www.google.com');
   driver.findElement(webdriver.By.name('q')).sendKeys(term);
   driver.findElement(webdriver.By.name('btnG')).click();
   driver.getTitle().then(function(title) {
     if (title !== (term + ' - Google Search')) {
       throw Error('Unexpected title: ' + title);
     }
   });
 });
});

webdriver.promise.fullyResolved(flows).then(function() {
 console.log('All tests passed!');
});
person orirawlings    schedule 13.01.2015
comment
Спасибо за направление. Конечно, нужно обеспечить обновленную версию NodeJs. Кроме того, если один терпит неудачу, они все терпят неудачу, что не очень хорошо. Проблема в том, что node пройдет через исключение, которое невозможно поймать и обработать. Это убьет ваш скрипт, так что другие не будут завершены, даже если они были успешно запущены. - person Lukus; 20.03.2015

параметр Selenium Grid должен помочь. Вы найдете учебник здесь, который вы можете адаптировать с помощью webdriverJS.

person fabmlk    schedule 18.12.2013