编辑#4:突破!!
我开始递归遍历父节点并返回相同的值,如下所示.其中一个父母 - 内部 - 也mat-drawer-container为isDisplayed返回false(所有其他人返回true,这似乎很奇怪).
看看那个节点,结果发现它是网站上唯一拥有CSS的标签display: contents.删除它会导致有问题的按钮- 以及它下面的所有其他内容 - 为isDisplayed返回true.哎呀,量角器甚至可以点击按钮,我可以在浏览器中看到预期的结果.
现在我想问题仍然存在:这是预期的行为还是一个错误?它不像显示祖先那样简单:应用内容; 我直接应用它rb-container,Protractor仍然能够找到按钮.
我是第一次在Protractor中进行端到端测试,在尝试测试按钮可见时遇到了问题.尽管按钮元素在DOM中并且可见,但isDisplayed返回false并且我的断言失败.
这是失败的最初断言:
expect(element(by.css("mat-drawer-content rb-container rb-fab-button[data-qaid='create-button'] > button")).isDisplayed()).toBe(true);
Run Code Online (Sandbox Code Playgroud)
(是的,选择器很乱,但我无法控制HTML.)
我已经使用了很长的browser.sleep()间隔来基本上暂停浏览器,所以我可以使用开发工具来检查人类可见的元素,而CSS让我相信它应该被检测为可见.
在搜索答案和/或错误无效后,我将一些信息记录到控制台,这仍然让我相信isDisplayed应该返回true:
[ EDITS#2,#3:记录了rb-container的所有直接子节点的更多信息; 根据量角器,只有一个节点是"可见的".]
let selector = element.all(by.tagName("mat-drawer-content")).get(0).all(by.css("rb-container > *"));
selector.count().then(function(selCount) {
for (let match = 0; match < selCount; match ++) {
browser.sleep(1000).then(() => {
let elm = selector.get(match);
console.log("\n >> " + match + "]");
elm.getTagName().then(tag => { console.log("tag name:", tag); });
elm.getCssValue("visibility").then(vis => { console.log("visibility:", …Run Code Online (Sandbox Code Playgroud)