似乎我使用element(by.css('#id'));
量角器有时会发现它,有时却没有。取决于DOM是否已经稳定下来。我已经离开了一些:
getElementsByCss: function (cssVal) {
// return element.all((by.css(cssVal)));
return self.wait(function () {
return element.all((by.css(cssVal))).then(function (els) {
return els;
}, function () {
return false; // Don't fail, we want to retry
});
}, GET_ELEMENT_TIMEOUT, 'Elements not found by css: ' + cssVal);
},
播放重试游戏以获取某个超时时间段的元素。我们用5秒钟。这似乎在大多数情况下都有效。在本地运行时我们没有问题。
当我们在云(酱实验室)上运行时,他们的虚拟机速度非常慢。我们仍然会得到随机问题。不幸的是,这些游戏必须在任何地方播放,例如:
getText: function (el) {
return self.wait(function () {
return el.getText();
}, 1000, 'Could not get element text.');
},
或
expectBulletin: function () {
var el, text;
return self.wait(function () {
// Find the bulleting element, make sure it's visible and grab its text.
// If any of those three fail, try all of them again.
return self.getElementByCss('.bulletin')
.then(function (elm) {
el = elm;
return self.isElementVisible(el);
}, function () {
return false;
})
.then(function () {
return self.getText(el).then(function (text) {
return text;
}, function () {
return false;
});
}, function () {
return false;
});
}, 10000, 'Count not get bulletin text.')
.then(function (result) {
text = result;
return self.executeScript('arguments[0].click();', el.getWebElement());
})
.then(function () {
return self.isElementNotVisible(el);
})
.then(function () {
return text;
});
},
所有self.wait
只是一个browser.driver.wait包装器......
wait: function (fn, timeout, msg) {
return browser.driver.wait(fn, timeout, msg);
},
这感觉像是一大堆绷带,而且它一直没有工作。 expectBulletin
在本地99%的时间都可以工作,但是当在慢速VM上远程运行时,它可以在大约50%的时间内工作。有时文本会返回空白,或者有关单击不可见元素或只是找不到公告元素的问题。
有没有更好的方法呢?
答案 0 :(得分:1)
似乎我使用了元素(by.css('#id'));量角器有时会发现 它,有时候不会。
你知道它会返回一个承诺吗?如果你想获得一个元素的绝对值,你必须首先处理它的承诺。
在执行任何断言之前,Protractor会等待页面准备就绪。如果您的页面已准备好"但是有些数据丢失了,你的角度应用程序有问题。