如何在量角器中使用brower.get()

时间:2016-01-26 12:25:37

标签: javascript angularjs testing protractor yeoman

我使用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生成文件。

1 个答案:

答案 0 :(得分:0)

  1. 对于bower.get():

    我使用了这样的代码" browser.get(' /'); "而不是问题中显示的两行代码。它现在将显示索引页面。

  2. 对于下拉选择测试:

    导致此错误的原因有两个。

    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'));
    

    最后我可以测试两个下拉选项。