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



量角器断言与 xpath 定位器一起传递,但不通过类名定位器传递。

工程

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

传递它的断言。

失败

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

产生以下错误:

在铬中,

失败:元素不可交互

在火狐中,

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

为什么会这样?

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

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

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

如果没有看到 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'));或任何更短的等价物。

这就是问题所在,我有多个具有相同类名的元素。量角器所做的是将第一个元素与该类一起获取。它应该做的是采用与该类相关的第二个但相关的元素。

我试过element.all(by.className('menu')).get(1),它工作得很好。

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

最新更新