問題描述
目前,我有以下頁面對象字段:
Currently, I have the following page object fields:
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 選擇器?
Is there a way to replace the XPath locator for the teams
field and have a CSS selector instead?
它的動機(jī)來自 樣式指南 和 建議不要使用 XPaths.
The motivation for it is coming from the Style Guide and the recommendation not to use XPaths.
據(jù)我了解,不可能有一個 CSS 選擇器從上下文中的當(dāng)前元素開始轉(zhuǎn)到下一個兄弟姐妹.但是,有其他選擇嗎?
From what I understand, it is impossible to have a CSS selector to go to the next sibling starting from current element in the context. But, are there any alternatives?
推薦答案
對任何事情說永不"是愚蠢的.我強(qiáng)烈支持 CSS 選擇器,因為通過 id 定位元素、CSS 選擇器、幾乎任何東西……都比 XPath 快.但是...同時我們說的是幾毫秒的差異.
Saying NEVER to anything is silly. I strongly favor CSS selectors because locating element by id, CSS selector, just about anything... is faster than XPath. But... at the same time we're talking a few ms of difference.
XPath 可以做一些其他定位器方法無法做到的事情.想到的一個例子是通過包含的元素文本查找元素(A
除外).除此之外,當(dāng) ID 不起作用時,我通常會堅持使用 CSS 選擇器.
There are some things that XPath can do that no other locator method can. One example that comes to mind is finding an element (other than A
) by contained element text. Other than that I generally stick to CSS selectors when ID doesn't work.
我非常不喜歡很多人在 SO 上的定位器策略,因為 XPath 似乎是查找元素的首選方式,以至于它很愚蠢.我見過人們只尋找一個 id 并使用 XPath.我認(rèn)為部分原因在于您可以輕松獲得 XPath,右鍵單擊檢查器中的元素并復(fù)制 XPath 并粘貼到代碼中.我相信您知道,問題在于有時(很多時候?)這會導(dǎo)致 XPath 非常脆弱,但有些/很多人不知道更好.
I strongly dislike a lot of people's locator strategies on SO because XPath seems to be the goto way to find elements to the point where it's silly. I've seen people looking for nothing but an id and using XPath. I think part of it is the ease of which you can obtain an XPath, right click on element in inspector and copy XPath and paste in code. The problem with that, as I'm sure you know, is that sometimes (many times?) that results in a very brittle XPath but some/many people don't know any better.
說了這么多,我會告訴你 W3C CSS 選擇器參考,也許你能找到你要找的東西.那里有一些兄弟組合器,但我沒有你的 HTML,所以我不知道它們中的哪一個(如果有的話)可以工作.
All that said, I'll point you to the W3C CSS Selector reference and maybe you can find what you are looking for. There are some sibling combinators in there but I don't have your HTML so I don't know which, if any, of them would work.
https://www.w3.org/TR/selectors/#selectors
https://www.w3.org/TR/selectors/#相鄰兄弟組合器
我剛剛閱讀了您問題下方的一些評論,發(fā)現(xiàn)您已經(jīng)了解 +
組合器.是否有某些原因您不能將初始定位器 CSS 與 XPath 轉(zhuǎn)換的字符串一起使用?我不知道這是否有效/可用,但在將 XPath 轉(zhuǎn)換為 CSS 選擇器后,我已經(jīng)組合了您在代碼中提供的兩個定位器.
I just read some of the comments below your question and see that you already knew about the +
combinator. Is there some reason you can't reuse your initial locator CSS with the XPath converted string? I don't know if this is even valid/usable but I've combined the two locators you provided in your code after converting the XPath to a CSS selector.
filter-item-edit .dropdown button + ul li.dropdown-list-item
這篇關(guān)于搜索同級時使用 CSS 選擇器而不是 XPath 定位器的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!