在我的代码中,有一个使用“protractor.By.repeater”选择的元素列表(tr)。 此列表使用“forEach”循环。
在此循环中,单击该元素,此单击应触发在单击元素之后包含新的“tr”。
我想选择那条新行。
我用过:
var nextRow = tr.$(protractor.By.xpath('following-sibling::tr'));
但随后:
nextRow.isDisplayed(function(row){
console.log('row', row);
});
它会生成错误,例如:“UnknownError:java.util.HashMap无法强制转换为java.lang.String”
有没有其他方法可以实现我想要的,即选择当前元素的下一个兄弟?
或者我在那里写了不正确的东西?
感谢您的帮助!
答案 0 :(得分:7)
看起来你错过了.then
并错误解释了isDisplayed的所作所为。
代码应该更像:
nextRow.isDisplayed().then(function(visible) {
console.log('is displayed? ', visible);
});
此外,您的ElementFinder nextRow
看起来不太正常,下面的变量tr
是什么?和量角器$
是element(by.css
的别名,它在你的代码中接受一个字符串参数,而不是你在下面解释的webdriver.Locator:
var nextRow = tr.$(protractor.By.xpath('following-sibling::tr'));
所以也许你的意思是:
var tr = $('table tr.first'); // just guessing here since you didn't provide that code
var nextRow = tr.element(By.xpath('following-sibling::tr'));
答案 1 :(得分:0)
使用Xpath选择器不是一个更好的选择,因为它会减慢元素查找机制的速度。
我设计了一个插件来解决此特定问题:protractor-css-booster
该插件提供了一些方便的定位器,以更好的方式找到同级,最重要的是使用CSS选择器。
使用此插件,您可以直接使用:
var nextRow = element(by.css('table tr.first')).element(By.followingSibling('tr'));
希望,它将对您有帮助...