【发布时间】:2016-11-08 19:55:34
【问题描述】:
目前,我有以下页面对象字段:
this.filterTeamDropdown = $("filter-item-edit .dropdown button");
this.teams = this.filterTeamDropdown.all(by.xpath("following-sibling::ul//li[contains(@class, 'dropdown-list-item')]"));
有没有办法替换 teams 字段的 XPath 定位器并使用 CSS 选择器来代替?
它的动机来自Style Guide 和recommendation not to use XPaths。
据我了解,不可能有一个 CSS 选择器从上下文中的当前元素开始转到下一个兄弟姐妹。但是,有其他选择吗?
【问题讨论】:
-
@Bhansa 是的,我知道
+是我正在寻找的,但问题是,我不能简单地用+启动选择器并期望它在以下环境中工作当前元素。而且,没有办法在选择器字符串中引用当前节点。谢谢。 -
XPath 可能是样式指南所说的“最脆弱”的策略,但我怀疑这只是因为它可以做 CSS 做不到的事情。与 CSS 表达式做同样事情的 XPath 表达式并不比等效的 CSS 更脆弱。而在这种情况下,CSS 显然无法满足您的需求。
-
@LarsH 好点。实际上,我认为该指南太残忍了,并且对 XPath 的陈述太强烈,因为很明显,它有实际的实际用例,在 CSS 选择器中没有直接的替代方案。有时,尽管人们过度使用 xpaths 作为适用于代码库中每个定位器的灵丹妙药,这会导致问题过于复杂,并使维护测试代码变得更加困难。谢谢,请随时将其发布为答案 - “不,在这种情况下仍然使用 xpath 并且不要担心”是一个有效的意见。
-
Alecxe,我同意,风格指南的“从不”建议太强了。 XPath 肯定被那些试图在不理解的情况下使用它的人滥用,但该指南反应过度。与任何语言一样,如果您在团队中工作而其他人必须维护您的代码,则在选择要使用的语言时需要考虑这一点。 XPath 也不太适合关于类的谓词。 (我犹豫是否要提交答案,因为我对 CSS 的了解不够充分,无法说它不能执行“当前元素的跟随兄弟”。)
标签: javascript selenium xpath css-selectors protractor