как видно из проблемы теста pic, есть два браузера, которые запускают разные тестовые примеры. Я хочу запустить spec 7 в обоих браузерах (browser1 и browser2) с взаимодействием, например, с чат-приложением. после запуска спецификаций с 1 по 6 в обоих браузерах, спецификация 7 должна запускаться в обоих браузерах с указанными тестами. например:
Эти оба действия должны выполняться в том же файле spec7.js, и этот файл должен запускаться в обоих браузерах, которые уже запущены для другого файла спецификаций. Я ищу помощь.
Вы можете использовать два файла для решения ваших проблем.
Я пытаюсь объяснить это с помощью примера чат-приложения
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
}
Я надеюсь, что это поможет, иначе скажите мне, чтобы я мог улучшить свой ответ ;-)
Транспарант позволяет решить эту проблему с помощью метода 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
});
Пожалуйста, перейдите по ссылке, приведенной выше, для дальнейшего объяснения.