我正在启动一个系统,该系统将包含越来越多的单页应用程序集合,我正在研究如何组织其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()的移动速度比规格快。我还注意到,在Selenium-webdriver/Testing中使用DONE()完成异步测试(我尝试时,我都会获得"不确定的功能")。
>我还尝试过不使用带有奇怪结果的硒包裹的摩卡杯全球 - 在我的Win 7 Enterprise中,所有测试都会立即通过,然后浏览器被触发,然后任何失败后都会引发异常;在我的Ubuntu 12.04机器上,所有测试立即通过,没有浏览器实例。
我确定我没有用尽组织这些测试的可能方法,以便它们可以正确运行,但是我看不到它们。
看起来您正在并行运行测试,但是您正在通过驱动程序的同一实例到每个驱动程序,因此他们将共享浏览器窗口。
我不确定您是否也正确使用WebDriverjs测试内容。我自己没有使用过它,但是如果有test.describe(...)
,我希望会有test.it(...)
。
请查看Web驱动程序中的一个测试文件,以了解他们如何编写测试。
我崩溃了,决定使用量角器。
我的问题在很大程度上是组织的。