我正在使用Protractor(Angular JS的webdriver包装器),尽管我可以无限期地从单个findElement实例中链接WebElement,但是当我尝试使用findElement(复数)链接findElements时遇到错误。

错误(堆栈跟踪在底部给出):



链接findElement :

var elementPromise = browser.findElement(by.css('body')).findElement(by.css('ul')).findElement(by.css('li'));
elementPromise.findElement(by.css('.icon-meter')); // does not raise error

在findElements 之后使用findElement:

var arrayPromise = browser.findElement(by.css('ul')).findElements(by.css('li'));
elementPromise = arrayPromise.then(function(elems) {
    return elems[0];
});
elementPromise.findElement(by.css('.icon-meter')); // => raises error

错误消息,带有跟踪
TypeError: Object [object Object] has no method 'findElement'
at repl:1:16
at /home/markham/src/dataraptor-rails4/spec/node_modules/elementexplorer-convenience.js:83:19
at webdriver.promise.ControlFlow.runInNewFrame_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1598:20)
at webdriver.promise.ControlFlow.runEventLoop_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1463:8)
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

最佳答案

我遇到了与 Protractor 0.24版本相同的问题。

解决方法是,我用findElement()替换了element()的所有调用,而用findElements()替换了所有all()的调用。

链接元素:

var elementPromise = browser.element(by.css('body')).element(by.css('ul')).element(by.css('li'));
elementPromise.element(by.css('.icon-meter'));

在findElements 之后使用findElement:

var arrayPromise = browser.element(by.css('ul')).all(by.css('li'));
elementPromise = arrayPromise.then(function(elems) {
    return elems[0];
});
elementPromise.element(by.css('.icon-meter'));

g+ post中有关于此版本的更多详细信息

08-15 17:40