量角器类名定位器失败,但xpath定位器通过

时间:2018-10-17 23:57:40

标签: angularjs jasmine protractor

量角器断言通过xpath定位器传递,而不通过类名定位器传递。

工程

var menu = element(by.xpath('/html/body/page/div[1]/div[3]/div[2]/div[1]/span'));

传递它的断言。

失败

var menu = element(by.classname('menu'));

产生以下错误:

在Chrome浏览器中,

  

失败:元素不可交互

在Firefox中,

  

失败:元素无法滚动到视图中

为什么会这样?

3 个答案:

答案 0 :(得分:3)

by.classname()将被内部的量角器转换为by.css()

by.classname('menu')将转换为by.css('.menu')

在chrome DevTools中手动尝试css选择器:.menu并检查.menu找到的第一个元素与xpath:/html/body/page/div[1]/div[3]/div[2]/div[1]/span相同。

答案 1 :(得分:1)

我们无法在不看到DOM的情况下建议任何可靠的CSS选择器,尤其是当您在xpath选择器中不使用menu类时。 如果要将其转换为CSS选择器,可以尝试:

element(by.css('page > div:nth-of-type(1) > div:nth-of-type(3) > div:nth-of-type(2) > div:nth-of-type(1) >span'));或任何更短的等效词。

答案 2 :(得分:0)

这是问题所在,我有多个具有相同类名的元素。量角器正在做的事情是在该类中使用第一个元素。它应该做的是将该类作为第二个但又相关的元素。

我尝试了element.all(by.className('menu')).get(1),它运行良好。

感谢您的帮助@yong和@Kacper为我指明了正确的方向。