我是 XPath 的新手并且很困惑。任何人都可以快速瀏覽一下,看看我的語法有什么問題?
我正在嘗試選擇所有直接子節點,它們的樹下某處有兩個子節點div's,id="list-overview"其中包含data-price<=20和a div containing "Orange" text
let xy = $x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]][./div/a/div/div[@class='fruit'][contains(.,'Orange')]])`)
打破它。我已經分別測驗了這兩個并且它們起作用了。
`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]]`
`//*[@id="list-overview"]/div[./div/a/div/div[@class='fruit'][contains(.,'Orange')])]`
我似乎無法以某種方式將它們結合起來,并且不確定我做錯了什么?
編輯:
嘗試了建議,以下 xpath 不再引發例外。但是它回傳空陣列,而有元素匹配 price < 20 和fruit="Orange"
$x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20] and ./div/div/a/div/div[@class='fruit'][contains(.,'Orange')]]`)
uj5u.com熱心網友回復:
如果我理解你的想法,你就會錯過and這兩個條件之間的邏輯。我相應地更正了 XPath 運算式。請試試這個:
let xy = $x(`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20] and ./div/a/div/div[@class='fruit'][contains(.,'Orange')]])`)
UPD
請試試這個:
let xy = $x(`//*[@id="list-overview"]/div[.//div[@data-price<=20] and .//div[@class='fruit'][contains(.,'Orange')]])`)
uj5u.com熱心網友回復:
而不是這個
$x(//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]][./div/a/div/div[@class='fruit'][contains(.,'Orange')]]))
你可以這樣做來結合它們,
把兩個孩子緊緊地結合在一起
$x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] and [./div/a/div/div[@class='fruit'][contains(.,'Orange')]])
或者擁有其中之一,但您仍然希望進一步進行。
$x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] or [./div/a/div/div[@class='fruit'][contains(.,'Orange')]])
此外,我已將其包括在內descendant以使其更具可讀性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362307.html
標籤:javascript xml 硒 路径 傀儡师
上一篇:SeleniumTimeoutException處理不起作用
下一篇:org.openqa.selenium.NoSuchElementException導航到子divSeleniumJava時
