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

Angularjs 量角器类名称定位器失败,但xpath定位器通过,angularjs,jasmine,protractor,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') 产生以下错误: 镀铬的 失败:元素不可交互 在firefox中 失败:无法将元素滚动到视图中 为什么会这样?by.classname()将通过内部量角器转换为by.css() by.cl

量角器断言随xpath定位器传递,但不随类名定位器传递

有效

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

通过它的断言

失败

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

产生以下错误:

镀铬的

失败:元素不可交互

在firefox中

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

为什么会这样?

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
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
如果不查看DOM,我们无法推荐任何可靠的css选择器,尤其是在xpath选择器中不使用
菜单
类时。 如果要将其转换为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')
或任何更短的等价物。

如果不查看DOM,我们无法推荐任何可靠的css选择器,尤其是当您在xpath选择器中不使用
菜单
类时。 如果要将其转换为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')或任何更短的等价物。

问题出在这里,我有多个元素具有相同的类名。量角器所做的是在该类中获取第一个元素。它本应该做的是把第二个但与该类相关的元素

我尝试了
element.all(by.className('menu')).get(1)
,效果非常好


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

问题出在这里,我有多个元素具有相同的类名。量角器所做的是在该类中获取第一个元素。它本应该做的是把第二个但与该类相关的元素

我尝试了
element.all(by.className('menu')).get(1)
,效果非常好


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

看起来他们是一样的。对于css选择器,我得到
by.css(body>page>div.main>div.body>div.body-main>div>span)
。对于css选择器,我得到
by.css(body>page>div.main>div.body>div.body-main>div>span)