【问题标题】:Checking if an element is present in protractor-cucumber-framework检查量角器黄瓜框架中是否存在元素
【发布时间】:2020-12-09 19:57:33
【问题描述】:

我有一个带有量角器黄瓜框架和 Chai 断言的 e2e 测试包。

我有一个包含如下数据表的功能文件。

Scenario: Menu Validation
        Given I am on the home page
        When I do Hover over the menu item I should have the menu dropdown
            |menu1                    |
            |menu2                    |
            |menu3                    |

我的步骤定义如下。

When(/^I do Hover over the menu item I should have the menu dropdown/, (dataTable) => {
    let rootMenu : Array<string> = Array.from( dataTable.rawTable )
    rootMenu.forEach((ele) => {
        console.log(ele[0]);
        element(by.id(ele[0])).isPresent().then(function(present) { 
            expect(present).to.equal(true);
         });
    });
});

即使菜单元素 ID 不存在,这个测试步骤也永远不会失败,我进一步检查了 expect(present).to.equal(true); 永远不会被执行。我不确定我错过了什么。

【问题讨论】:

  • 有很多事情我不明白你为什么这样做...例如为什么你这样做rootMenuforEach 但是你说ele[0] 就像rootMenu是一个数组数组
  • 是的,我有黄瓜特征文件,它有一个数据表,数据表是一个数组数组。所以 rootMenu 有这样的特征文件中的数据 [[menu1],[menu2],[menu3]]

标签: protractor cucumber chai


【解决方案1】:

你可以试试这个吗

When(/^I do Hover over the menu item I should have the menu dropdown/, async (dataTable) => {
    let rootMenu : Array<string> = Array.from( dataTable.rawTable )
    for (let i; i < rootMenu.length; i++) {
        let ele = = rootMenu[i];
        console.log(ele[0]);
        expect(await element(by.id(ele[0])).isPresent()).to.equal(true);
    }
})

【讨论】:

  • 这行得通,但我只是对为什么逻辑在 foreach 中不起作用感兴趣!
  • foreach 只是触发每个元素的命令,这就是为什么在内部运行异步代码时它会产生副作用(队列刚刚中断)。如果对你有帮助,请采纳答案
  • 以后,我建议你远离.then,更好地使用async/await
猜你喜欢
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多