我有一个 Angular 页面,它根据单选按钮的值显示或隐藏国家/地区 dropDownList。如果 rb 为真,则隐藏 ddl,如果 ddl 为假,则显示 ddl。这是直接在 ddl HTML 中完成的,将以下属性添加到选择标记:ng-show="!vm.inscriptor.isLocalCountry"
。
除以下 Protractor 测试外,所有工作都按预期进行:
it(testNumber++ + " ddl de países debería estar oculto", function () {
pages.register.rbdLocalCountryTrue.click();
expect(pages.register.ddlCountries.isPresent()).toBeTruthy();
expect(pages.register.ddlCountries.isDisplayed()).toBeFalsy();
});
正如预期的那样,当单击真值的单选按钮时,ddl 被隐藏,但是“isDisplayed”期望抛出以下错误:
Expected true to be falsy.
我能想到的唯一原因是在点击完成处理之前正在执行 expect 语句。我尝试按照以下方式重构测试:
it(testNumber++ + " ddl de países debería estar oculto", function () {
pages.register.rbdLocalCountryTrue.click().then(function () {
expect(pages.register.ddlCountries.isPresent()).toBeTruthy();
expect(pages.register.ddlCountries.isDisplayed()).toBeFalsy();
});
});
但我仍然会得到预期的随机结果。
如果我添加 browser.sleep(5000),那么期望的结果会正确显示,但我读过的所有地方都说 browser.sleep 是不得已的技巧。
有没有其他方法告诉 Protractor 等待点击完成处理?还有其他建议吗?
谢谢
最佳答案
您可以使用 browser.wait()
来隐藏 click()
之后的元素。另外,您不需要链接 Click()
和 expect()
的 promise ,因为 Protractor Control Flow 会为您完成
你可以有这样的东西
it(testNumber++ + " ddl de países debería estar oculto", function () {
pages.register.rbdLocalCountryTrue.click();
browser.wait(protractor.ExpectedConditions.invisibilityOf(pages.register.ddlCountries), 10000);
expect(pages.register.ddlCountries.isPresent()).toBeTruthy();
expect(pages.register.ddlCountries.isDisplayed()).toBeFalsy();
});
关于angularjs - 涉及 ng-show 的 Protractor 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989473/