Javascript driver.get多个URL导致错误测试失败

Javascript driver.get多个URL导致错误测试失败,javascript,selenium-webdriver,Javascript,Selenium Webdriver,我正在着手开发一个系统,该系统将包含越来越多的单页应用程序,我正在研究如何组织它们的ui测试以合理地扩展。我想在每页编写一个测试模块,作为验证它的练习,但在连续调用driver.get时遇到了一些问题 specs/index.js var webdriver = require('selenium-webdriver'); var test = require('selenium-webdriver/testing'); var expect = require('chai').expect;

我正在着手开发一个系统,该系统将包含越来越多的单页应用程序,我正在研究如何组织它们的ui测试以合理地扩展。我想在每页编写一个测试模块,作为验证它的练习,但在连续调用driver.get时遇到了一些问题

specs/index.js

var webdriver = require('selenium-webdriver');
var test = require('selenium-webdriver/testing');
var expect = require('chai').expect;
var server = new require('selenium-webdriver/remote').SeleniumServer(path, {port: 4444});
var specs = [
    require('./google'), require('./bing')
];

//...

var driver = new webdriver.Builder()
         .usingServer(server.address())
         .withCapabilities(webdriver.Capabilities.firefox())
         .build();

test.describe('while learning webdriverjs', function() {
    test.after(function() {
        driver.quit();
    });

    specs.forEach(function(spec) {
        spec.run(driver, webdriver, test);
    });
});
specs/bing.js

var expect = require('chai').expect;

function run(browser, webdriver, test) {
    test.describe('a trip to bing', function() {
        browser.get('http://www.bing.com');

        test.it('does not fail', function() {
            browser.getTitle().then(function(title) {
               expect(title).to.equal('Bing');
            });
        });
    });
}

module.exports = { run: run };
specs/google.js

var expect = require('chai').expect;

function run(browser, webdriver, test) {
    test.describe('a trip to google', function() {
        browser.get('http://www.google.com');

        test.it('does not fail', function() {
            browser.getTitle().then(function(title) {
                expect(title).to.equal('Google');
            });
        });
    });
}

module.exports = { run: run };
现在,单独运行google.js或bing.js都可以,但连续运行这两个都会带来:

while learning webdriverjs
    a trip to bing
      1) does not fail
    a trip to google
      ✓ does not fail


1 passing (12s)
1 failing

1) while learning webdriverjs a trip to bing does not fail me:

  + expected - actual

  +"Bing"
  -"Google"

  at <anonymous>
==== async task ====
WebDriver.getTitle()
  at webdriver.WebDriver.schedule (/.../node_modules/selenium-    webdriver/lib/webdriver/webdriver.js:267:15)
  at webdriver.WebDriver.getTitle (/.../node_modules/selenium-webdriver/lib/webdriver/webdriver.js:640:15)
  at /.../projects/learn-webdriver/specs/bing.js:9:11
  at webdriver.promise.ControlFlow.runInNewFrame_ (/.../node_modules/selenium-webdriver/lib/webdriver/promise.js:1445:20)
  at webdriver.promise.ControlFlow.runEventLoop_ (/.../node_modules/selenium-webdriver/lib/webdriver/promise.js:1310:8)
  at wrapper [as _onTimeout] (timers.js:252:14)
  at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
==== async task ====
  at Context.<anonymous> (/.../node_modules/selenium-webdriver/testing/index.js:119:12)
  at Test.Runnable.run (/usr/local/lib/node_modules/mocha/lib/runnable.js:194:15)
  at Runner.runTest (/usr/local/lib/node_modules/mocha/lib/runner.js:372:10)
  at /usr/local/lib/node_modules/mocha/lib/runner.js:448:12
  at next (/usr/local/lib/node_modules/mocha/lib/runner.js:297:14)
  at /usr/local/lib/node_modules/mocha/lib/runner.js:307:7
  at next (/usr/local/lib/node_modules/mocha/lib/runner.js:245:23)
  at Object._onImmediate (/usr/local/lib/node_modules/mocha/lib/runner.js:274:5)
  at processImmediate [as _immediateCallback] (timers.js:330:15)
不完全确定我做错了什么,但我确信driver.get的运行速度比规范快。我还注意到,在SeleniumWebDriver中,使用done来完成异步测试是不可用的。我尝试时,未定义的测试不是一个函数

我也尝试过不使用硒包装的摩卡globals,结果很奇怪——在我的Win 7 Enterprise上,所有测试都立即通过,然后浏览器启动,任何失败的都会抛出异常;在我的Ubuntu12.04机器上,所有测试都立即通过,并且没有浏览器实例加载


我确信我还没有用尽可能的方法来组织这些测试,以便它们能够正常运行,但我无法在atm上看到它们。

看起来您正在并行运行测试,但您正在向每个测试传递相同的驱动程序实例,以便它们共享浏览器窗口

我也不确定你是否正确使用了webdriverjs测试工具。我自己没用过,但如果有测试,请描述一下。。。我希望会有一个测试。它


看看他们是如何编写测试的。

我崩溃了,决定继续


我的问题主要是组织性的,这就解决了它。

共享浏览器窗口是一般的想法,否则每个模块单独的浏览器实例将非常缓慢-尝试在这里缓解这一问题。Mocha和selenium webdriver/testing通过代理可以完美地处理嵌套测试。期望测试。它在模块本身中。现在您提到了并行运行-可能有一些类似的东西,但即使您提到的链接也没有提及套件序列化或测试组织,所以我不确定它有什么帮助。我需要收回那句话的一部分——在提供的链接上的测试确实表明,为每个规范创建了一个新的驱动程序实例。这看起来相当无害。此外,一个env对象正在向该驱动程序实例提供数据,该实例是在test.suite中传递的,但不清楚它是否应用于test.descripe。我还在想这个。谢谢你的意见。