使用WebDriver或WebDriverJS同时处理两个浏览器

时间:2013-10-23 13:14:37

标签: javascript selenium-webdriver webdriver webdriver-io

我打算测试一个简单的实时网络应用。此应用程序是用JavaScript编写的,它显示登录用户的“状态”。如果userA记录他的状态正在从“非活动”修改为“活动”。此操作将反映给登录到应用程序的所有其他用户。登录的UserB实时显示要更改的userA的存在。

我想测试一下这个场景。测试处理程序打开一个浏览器,执行写入操作,同时第二个浏览器更新。

有哪些工具?可以用WebDriver / WebDriverJs完成吗?我可以通过WebDriver处理两个线程/会话吗?任何例子?

4 个答案:

答案 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,您将有两个不同的会话来测试您的应用。