我使用Protractor来测试下拉选择。代码如下:
var productCountry = element(by.model('main.productCountry1'));
productCountry.click();
var country = element.all(by.repeater('country in countries'));
country.get(5).click();
browser.sleep(500);
错误是:
Stack:
ElementNotVisibleError: element not visible
(Session info: chrome=44.0.2403.81)`
我使用代码查看数组[names]中的数据:
var names =element.all(by.repeater('country in countries').column('country.name'));
names.getText().then(function(txt){
console.log(txt);
});
结果显示数组如下所示:
['','', '', '', '', .....,'','Kenya','Kiribati',....,'','','','']
只能获得元素的一部分,其他元素都是空的。每次空的部分都不同,我会跑几次。 我使用了第一行代码
browser.get('dist/#');
browser.get('app/index.html');
进入网页。如果我运行上面的第二行代码,则会找到“未找到”#39;显示在网站上,错误是:
Stack:
Error: Failed: Error while running testForAngular: asynchronous script timeout: result was not received in 11 seconds
(Session info: chrome=44.0.2403.81)
这会导致元素变空吗?我在网上看到的例子总是使用第二行browser.get()
。是否有人使用过第一种方法?
我发现如果更改了$scope.country
scr/app/tab/main.controller
中的数据,当我运行gulp serve
时,选择中的选项已更改,但是当我运行量角器并从{{1}获取时},选项不会改变。我想这可能导致元素空洞。我用yeoman生成文件。
答案 0 :(得分:0)
对于bower.get():
我使用了这样的代码" browser.get(' /'); "而不是问题中显示的两行代码。它现在将显示索引页面。
对于下拉选择测试:
导致此错误的原因有两个。
var productCountry = element(by.id('countryName'));
var country1 = element.all(by.repeater('country1 in countries'));
productCountry.click();
browser.sleep(500);
var a = country1.get(2);
a.click();
browser.sleep(500);
expect(a.getAttribute('value')).toEqual('Indonesia');
这是我的代码。一个原因是在执行productCountry.click()
之后,我们需要让浏览器暂停一段时间以等待渲染生效。
另一个原因是我在我的HTML文件中使用了两个相同的转发器,当我进行e2e测试时,系统无法区分我想要连接到该元素的转发器。所以我改变了代码:
var names =element.all(by.repeater('country in countries').column('country.name'));
到
var country1 = element.all(by.repeater('country1 in countries'));
var country2 = element.all(by.repeater('country2 in countries'));
最后我可以测试两个下拉选项。