这两个操作都应该在相同的spec7.js文件中完成,并且此文件应该在两个已经为其他specs文件运行的浏览器中运行。 我正在寻求帮助。
答案 0 :(得分:0)
量角器允许您使用。来解决这个问题
browser.forkNewDriverInstance(opt_useSameUrl, opt_copyMockModules)
方法,它将返回一个独立的浏览器对象。从this链接引用Protractor API概述,这是官方文档 -
如果您正在测试两个浏览器需要相互交互的应用程序(例如聊天系统),您可以通过在测试中动态创建浏览器来使用量角器来实现。量角器在浏览器对象中公开一个函数来帮助您实现此目的:
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);`
我想这就是你要找的东西。根据您提到的问题,您可以特别提及您要执行操作的浏览器对象,例如 - 您可以使用
等方法在第二个实例上验证您的消息 //get element text in second browser
var element2=browser2.element;
element2.getText().then(function(){
//use an expect to verify the text
});
请仔细阅读上面给出的 link 进一步说明。
答案 1 :(得分: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
}
我希望这会有所帮助,否则请告诉我,以便我可以改进我的答案; - )