量角器 - 选择当前元素的下一个兄弟

时间:2014-08-19 18:09:37

标签: angularjs protractor

在我的代码中,有一个使用“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”

有没有其他方法可以实现我想要的,即选择当前元素的下一个兄弟?

或者我在那里写了不正确的东西?

感谢您的帮助!

2 个答案:

答案 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'));

希望,它将对您有帮助...