我想检索页面上的元素列表,并为每个元素创建一个测试规范。我的(伪)代码是: -
fetchElements().then(element_list) {
foreach element {
it("should have some property", function() {
expect("foo")
})
}
}
当我运行它时,我得到"没有找到规格",我认为这是有意义的,因为它们是在主路径上定义的。
实现动态创建规范的最佳方法是什么?
答案 0 :(得分:5)
存在阻碍其轻松实现的主要问题:
Protractor
应该首先找到Protractor/WebDriverJS
,it
,beforeEach
,beforeAll
,afterEach
中包含afterAll
特定代码才能生效正确并将承诺放在控制流等上。it
块 - jasmine
不会执行它们:Cannot perform a 'it' inside another 'it' 如果它不是您想要生成测试用例的元素,而是具有定义值的静态变量,那么它将非常简单:
describe("Check something", function () {
var arr = [
{name: "Status Reason", inclusion: true},
{name: "Status Reason", inclusion: false}
];
arr.map(function(item) {
it("should look good with item " + item, function () {
// test smth
});
});
});
但是,如果arr
是一个承诺,那么测试将在一开始就失败,因为describe
内部的代码(不在it
内)将被执行当jasmine加载测试时。
总而言之,只有一个it()
块并在其中工作:
it("should have elements with a desired property", function() {
fetchElements().then(element_list) {
foreach element {
expect("foo")
})
}
}
如果您担心将测试失败与元素区分开来,您可以提供可读的错误消息,这样,如果测试失败,您可以轻松地说,哪些元素未通过测试(在你的伪测试案例中没有特定属性)。例如,您可以提供custom messages to expect()
:
expect(1).toEqual(2, 'because of stuff')
答案 1 :(得分:0)
我们可以使用jasmin data provider生成动态测试,但它仅适用于静态数据。
如果要通过量角器中的异步调用生成测试,则需要在量角器config js中使用onprepare函数。
创建一个引导加载程序,并从excel或服务器读取测试用例,并在onprepare函数中导入数据加载程序。很难解释,因为我已经面对 此JavaScript版本不支持很多导入之类的问题,并且期望2个args,但是只有1个。最后,我使用babel修复了这些问题并能够生成测试。
下面是我在on prepare方法中完成的示例实现
var automationModule = require('./src/startup/bootloader.ts');
var defer = protractor.promise.defer();
automationModule.tests.then(function(res) {
defer.fulfill(res);
});
bootloader.ts包含用于从excel工作表读取测试套件和测试的代码,并将测试设置为单个到类。
res是从bootloader.ts返回的单例类的实例。
这里很难解释所有内容,但是您可以在我的github https://github.com/mannejkumar/protractor-keyword-driven-framework
中查看我的完整实现