как контролировать тестовые случаи для запуска на разных браузерах в транспортире

1

тестовая проблема

как видно из проблемы теста pic, есть два браузера, которые запускают разные тестовые примеры. Я хочу запустить spec 7 в обоих браузерах (browser1 и browser2) с взаимодействием, например, с чат-приложением. после запуска спецификаций с 1 по 6 в обоих браузерах, спецификация 7 должна запускаться в обоих браузерах с указанными тестами. например:

Файл spec7.js:

  • user1 отправляет hello msg из браузера1 в user2 в browser2.
  • user2 получить привет msg в браузере2 и отправить msg привет от браузера2 к user1 в браузере1.

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

Теги:
selenium
protractor
e2e-testing

2 ответа

0
Лучший ответ

Вы можете использовать два файла для решения ваших проблем.

Я пытаюсь объяснить это с помощью примера чат-приложения

spec7_browser1.js:

...
//Sends own message
element(by.id('messageInput')).sendKeys('hello'); // Enters hello into the message input field

element(by.id('submitMessage')).click(); // Clicks on the submit button to send the message

expect(element(by.id('chat')).getText()).toContain('hello');

// Waits for the message of browser 2
var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElement(element(by.id('chat')), 'hi'), 60000); // Waits until the given text is displayed in the element and fails if the text is not displayed in 60 seconds 

expect(element(by.id('chat')).getText()).toContain('hi');
...

spec7_browser2.js:

...
// Waits for the message of browser 1
var EC = protractor.ExpectedConditions;
browser.wait(EC.textToBePresentInElement(element(by.id('chat')), 'hello'), 60000); // Waits until the given text is displayed in the element and fails if the text is not displayed in 60 seconds 

expect(element(by.id('chat')).getText()).toContain('hello');

// Sends own message
element(by.id('messageInput')).sendKeys('hi'); // Enters hello into the message input field

element(by.id('submitMessage')).click();

expect(element(by.id('chat')).getText()).toContain('hi');
...

И так далее...

Возможно, вам нужно увеличить тайм-аут жасмина по умолчанию в вашем protractor-config.js:

jasmineNodeOpts: {
    ...
    defaultTimeoutInterval: 90000 // 90s timeout
}

Я надеюсь, что это поможет, иначе скажите мне, чтобы я мог улучшить свой ответ ;-)

  • 0
    ответ кажется хорошим. Я постараюсь реализовать, и я дам вам знать.
  • 0
    это работает приятель .. спасибо
Показать ещё 1 комментарий
0

Транспарант позволяет решить эту проблему с помощью метода browser.forkNewDriverInstance(opt_useSameUrl, opt_copyMockModules), который вернет независимый объект браузера. Процитируя обзор API-интерфейса Protractor по этой ссылке, вот официальная документация для this-

Если вы тестируете приложения, в которых два браузера должны взаимодействовать друг с другом (например, чат-системы), вы можете сделать это с помощью транспортира, динамически создавая браузеры в пути в своем тесте. Транспортир предоставляет функцию в объекте браузера, чтобы помочь вам в этом: browser.forkNewDriverInstance(opt_useSameUrl, opt_copyMockModules). Вызов этого приведет к возврату нового независимого объекта браузера. Первый параметр в функции означает, хотите ли вы, чтобы новый браузер начинался с того же URL-адреса, что и браузер, из которого вы разветвлялись. Второй параметр означает, хотите ли вы, чтобы новый браузер копировал модули-макеты из браузера, из которого вы были разветвлены.

browser.get('http://www.angularjs.org');
browser.addMockModule('moduleA', "angular.module('moduleA', []).value('version', '3');");

// To create a new browser.

var browser2 = browser.forkNewDriverInstance();

// To create a new browser with url as 'http://www.angularjs.org':

var browser3 = browser.forkNewDriverInstance(true);

// To create a new browser with mock modules injected:
var browser4 = browser.forkNewDriverInstance(false, true);

// To create a new browser with url as 'http://www.angularjs.org' and 
mock modules injected:
var browser4 = browser.forkNewDriverInstance(true, true);'

Полагаю, это то, что вы ищете. В соответствии с упомянутой вами проблемой вы можете конкретно указать объект браузера, который вы хотите выполнить in- для eg-, вы можете проверить свое сообщение на втором экземпляре, используя метод, например

 //get element text in second browser
  var element2=browser2.element;
  element2.getText().then(function(){
     //use an expect to verify the text
 }); 

Пожалуйста, перейдите по ссылке, приведенной выше, для дальнейшего объяснения.

  • 0
    forkNewDriverInstance открывает новый экземпляр браузера. Поскольку я разместил изображение, другой браузер уже запущен, я хочу взаимодействия в уже запущенном браузере.
  • 0
    создайте новое окно браузера и затем переключитесь на этот браузер, чтобы выполнить следующее действие
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню