量角器断言通过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中,
失败:元素无法滚动到视图中
为什么会这样?
答案 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为我指明了正确的方向。