Selenium JavaScript和Mocha Beforeach为每个测试创建新的浏览器实例
我使用Selenium和JavaScript以及Mocha作为测试框架 我试图在每个测试用例之前创建一个新的webdriver实例(并且在每个测试用例之后退出驱动程序实例),使用Mocha中的beforeach()和afterEach()方法。这就是当前我的测试的样子:Selenium JavaScript和Mocha Beforeach为每个测试创建新的浏览器实例,javascript,selenium,mocha.js,Javascript,Selenium,Mocha.js,我使用Selenium和JavaScript以及Mocha作为测试框架 我试图在每个测试用例之前创建一个新的webdriver实例(并且在每个测试用例之后退出驱动程序实例),使用Mocha中的beforeach()和afterEach()方法。这就是当前我的测试的样子: test = require('selenium-webdriver/testing'), webdriver = require('selenium-webdriver'); test.describe('User A Ac
test = require('selenium-webdriver/testing'),
webdriver = require('selenium-webdriver');
test.describe('User A Actions', function(){
this.timeout(10000);
test.describe('User A page 1', function(){
test.it('should see X on page', function(){
var driver = new webdriver.Builder().withCapabilities(
webdriver.Capabilities.chrome()).build();
driver.get('http://mywebsite.org');
loginUserA(driver);
goToPage1(driver);
// assert some element is there
driver.quit()
});
test.describe('User A page 2', function(){
test.it('should see Y on page', function(){
var driver = new webdriver.Builder().withCapabilities(
webdriver.Capabilities.chrome()).build();
driver.get('http://mywebsite.org');
loginUserA(driver);
goToPage2(driver);
// assert some other element is there
driver.quit()
});
});
如您所见,它在每个测试开始时创建一个新的webdriver实例,并退出它。我觉得在每次测试的顶部都有这些是非常重复的。此外,如果测试失败,它将无法到达driver.quit()
,这将使浏览器挂起
我希望将beforeach()方法和afterEach()方法放在顶级描述中,因此它类似于这样:
test.describe('User A Actions', function(){
this.timeout(10000);
beforeEach(function(){
var driver = new webdriver.Builder().withCapabilities(
webdriver.Capabilities.chrome()).build();
driver.get('http://mywebsite.org');
});
afterEach(function(){
driver.quit();
});
test.describe('User A page 1', function(){
loginUserA(driver);
goToPage1(driver);
// assert some element is there
});
test.describe('User A page 2', function(){
loginUserA(driver);
goToPage2(driver);
// assert some other element is there
});
});
当我尝试此操作时,得到一个错误
ReferenceError:未定义驱动程序。如何解决这个问题?Mocha不会改变JavaScript范围的正常规则。如果您所做的事情不遵守JavaScript中作用域的一般规则,那么Mocha将无法让它工作
您需要在测试中声明驱动程序
。在每个
钩子之前描述
块而不是:
test.describe('User A Actions', function(){
var driver; // Declare it here.
this.timeout(10000);
test.beforeEach(function(){
driver = new webdriver.Builder().withCapabilities(
webdriver.Capabilities.chrome()).build();
driver.get('http://mywebsite.org');
});
// ... etc ...
另外,请确保使用Selenium导出的API,因此test.beforeach
而不是直接使用beforeach
(与所有其他挂钩相同,包括您已经拥有的afterEach
)。否则,您将跳过Selenium在使用导出的API时为您执行的控制流管理。Mocha不会更改JavaScript作用域的正常规则。如果您所做的事情不遵守JavaScript中作用域的一般规则,那么Mocha将无法让它工作
您需要在测试中声明驱动程序
。在每个
钩子之前描述
块而不是:
test.describe('User A Actions', function(){
var driver; // Declare it here.
this.timeout(10000);
test.beforeEach(function(){
driver = new webdriver.Builder().withCapabilities(
webdriver.Capabilities.chrome()).build();
driver.get('http://mywebsite.org');
});
// ... etc ...
另外,请确保使用Selenium导出的API,因此test.beforeach
而不是直接使用beforeach
(与所有其他挂钩相同,包括您已经拥有的afterEach
)。否则,您将跳过Selenium在使用导出的API时为您执行的控制流管理。谢谢!但是一个问题变成了另一个问题。。这样做似乎解决了驱动程序未定义的问题,但现在它只打开了一个浏览器,无法导航到URL。我已经用您应该做的另一个更改编辑了我的答案,这可能解释了您描述的问题。啊,我们开始了,谢谢您!非常感谢你的帮助。谢谢!但是一个问题变成了另一个问题。。这样做似乎解决了驱动程序未定义的问题,但现在它只打开了一个浏览器,无法导航到URL。我已经用您应该做的另一个更改编辑了我的答案,这可能解释了您描述的问题。啊,我们开始了,谢谢您!非常感谢你的帮助。