如何使用量角器遍历一组元素并测试它们是否可单击

时间:2018-08-01 12:37:28

标签: javascript selenium selenium-webdriver promise protractor

我需要测试页面上的按钮列表是否已显示并启用。首先,我收集所有带有elements.all的元素。

allEmployeeOptions = element.all(by.css('[role=option]'));

然后,我尝试使用.each函数遍历它们并测试它们是否显示(我还将添加isEnabled。)

   testAllOptionsClickable(){
    //this.actions.click();
    browser.sleep(3000);
    this.allEmployeeOptions.each(function(elm){
    expect(elm.isDisplayed).toBe(true);
    });

这似乎不起作用,我对每个元素重复执行了10次“预期功能为真”。

我的最佳猜测是解决循环承诺有困难,但这是我第一次在Protractor中编写这样的循环。也有可能。每种方法都不正确,而for循环会更好。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

.each是正确的方法,我不会使用for循环遍历元素。您的问题只是缺少括号,isDisplayed()是一个函数,因此您只需要将断言更改为expect(elm.isDisplayed()).toBe(true);

此外,我应该添加另一个断言。显示内容并不表示某个元素一定是可单击的,您还应该考虑为isEnabled()添加一个检查。

答案 1 :(得分:0)

您做对了。但是量角器具有确定元素是否可单击的方法。

example:


it('....xxxx.', function() {
    elems=$$('.items.item li'); // use your css locator
    var EC = protractor.ExpectedConditions;
    elems.each(async function(elem){
    browser.wait(EC.elementToBeClickable(elem), 5000);
    // perform other action 
    let elmtxt= await elem.getText();
    console.log("text: "+elmtxt);
    //expect(elem.isDisplayed()).toBe(true); /toBeTruthy();/
});