我已经定义了一个可以在按钮上使用的指令,如果单击该按钮,它将远程显示文档中的一些元素,代码如下:
.directive("mydirective", function() {
return {
link: function(scope, element) {
element.bind('click', function() {
$timeout(function() {
angular.element("#aaa").remove();
}, 1000);
});
}
});
现在我想用量角器测试它,代码如下:
$("#mybutton").click(); // the button has the 'mydirective'
// wait until "#aaa" is removed
browser.wait(function() {
var deferred = protractor.promise.defer();
$("#aaa").isPresent().then(function(data) { // !!!!
deferred.fulfill(!data);
});
return deferred.promise;
}, 2000);
// checking
expect($("#aaa").isPresent()).toBe(false);
但是当我运行测试时,它会报告:
Error: Locator cannot be empty
代码中的!!!!
行。
为什么以及如何解决它?
答案 0 :(得分:1)
为什么不使用ElementFinder
:
对于大多数用途,可以将ElementFinder视为WebElement 特别是,您可以对它们执行操作(即click,getText) 你会是一个WebElement。 ElementFinders扩展了Promise,并且曾经 动作是在ElementFinder上执行的,最新结果来自于 可以使用那时访问链。与WebElement不同, 在执行查找之前,ElementFinder将等待角度稳定 或行动。
element(by.id('mybutton')).click();
expect(element(by.id('aaa')).isPresent()).toBe(false);
UPD。事实证明isElementPresent()
最终在这种情况下起作用:
expect(browser.isElementPresent(by.id('aaa'))).toBe(false);
答案 1 :(得分:1)
你不需要承诺。他们暗示着。
browser.driver.wait ->
browser.driver.isElementPresent(By.id 'aaa').then (present) -> !present