簡體   English   中英

如何在網頁上查找文本並使用Selenium和Java獲取其XPath或CSS

[英]How to find text on a webpage and get its XPath or CSS with Selenium and Java

有一個頁面列出了動態表中的項目。 桌子上的物品順序和數量隨機變化。

我想基於文本“ Itemx”找到項目“ Itemx”之一,然后在代碼的另一部分中獲取並使用其XPath或CSS。

我可以基於文本“ Itemx”找到該元素

driver.findElement(By.cssSelector("BODY")).getText().matches("^[\\s\\S]*Itemx[\\s\\S]*$");

但是,如何獲得其XPath或CSS?

我似乎在網上找不到任何東西。 那里的所有內容都向您展示了如何使用XPath驗證或查找文本。 對我來說恰恰相反。 我有文本,我想找到它的XPath。

XPath和CSS選擇器都是任意的。 在一般情況下,沒有好的答案。

選擇第一c<a><b></b><c></c><c></c></a>與CSS選擇可能是c:first-of-type ,或a > c:nth-child(2)ac:first-of-type ,或a > b + c ,或其他一些東西。 與XPath類似,有很多表示它的方法。 如果您更改標記,應該怎么辦?

這完全取決於上下文,所需的穩定性,錯誤肯定或錯誤否定是否更糟(您可以將其設置得非常嚴格,以便如果標記更改,它可能會破壞,或者可以使其變得非常寬松,以便如果標記更改,您很可能會選擇錯誤的內容)以及執行此操作的人的想法。 (我會選擇上述哪種方式?Eeny,meeny,miny,mo ...)

但是,如果您只關心文檔的當前狀態並且不需要彈性,則首先考慮您是否確實需要這樣的選擇器。 您可能可以改為傳遞DOM元素。 但是,如果要唯一地標識元素,則遵循DOM樹將是一種非常簡單的方法,逐級向下移動,觀察節點是哪個子節點。 您將得到如下所示的結果:

:root > :nth-child(3) > :nth-child(1) > :nth-child(4)

丑陋,但這可能就是您想要的。

如果可以通過文本識別項目,則已經有一個XPath: //*[contains(., 'Itemx')

Firefox的Firebug有一個名為Firepath的加載項。 基本上安裝了它,您可以右鍵單擊頁面上的任何元素,然后選擇:在FirePath中檢查。 如果您嘗試將XPATH或CSS SELECTOR路徑修改得更短,也可以在此處運行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM