我打算测试一个简单的实时网络应用。此应用程序是用JavaScript编写的,它显示登录用户的“状态”。如果userA记录他的状态正在从“非活动”修改为“活动”。此操作将反映给登录到应用程序的所有其他用户。登录的UserB实时显示要更改的userA的存在。
我想测试一下这个场景。测试处理程序打开一个浏览器,执行写入操作,同时第二个浏览器更新。
有哪些工具?可以用WebDriver / WebDriverJs完成吗?我可以通过WebDriver处理两个线程/会话吗?任何例子?
答案 0 :(得分:3)
您可以使用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窗口都会打开,并会独立执行您的说明。
答案 1 :(得分:1)
Selenium Grid option应该做到这一点。你会找到一个教程here 您可以使用webdriverJS进行调整。
答案 2 :(得分:1)
使用更高版本的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!');
});
答案 3 :(得分:0)
您可以使用WebDriver执行此操作,但如果您想在同一台计算机上运行这两种浏览器,最好的方法是使用不同的浏览器,这样您就可以拥有两个不同的会话。
因此,尝试使用ChromeDriver和FirefoxDriver,您将有两个不同的会话来测试您的应用。