Soy nuevo en XPath y estoy confundido. ¿Cualquiera puede echar un vistazo rápido y ver qué está mal en mi sintaxis?
Estoy tratando de seleccionar todos los div's secundarios directos de id="list-overview" que tiene dos nodos secundarios en algún lugar de su árbol que contienen data-price<=20 y 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')]])`)para romperlo He probado estos dos por separado y funcionaron.
`//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]]` `//*[@id="list-overview"]/div[./div/a/div/div[@class='fruit'][contains(.,'Orange')])]`Parece que no puedo combinarlos de alguna manera y no estoy seguro de lo que estoy haciendo mal.
EDITAR:
Probé las sugerencias y el siguiente xpath ya no arroja una excepción. Pero devuelve una matriz vacía mientras hay elementos que coinciden con el precio <20 y 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')]]`)Si entiendo tu idea, te falta lo lógico and entre estas 2 condiciones. Corregí la expresión XPath en consecuencia. Por favor, intente esto:
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
Por favor, intente esto:
let xy = $x(`//*[@id="list-overview"]/div[.//div[@data-price<=20] and .//div[@class='fruit'][contains(.,'Orange')]])`)En lugar de esto
$x(//*[@id="list-overview"]/div[./div/a/div/div/div[@data-price<=20]][./div/a/div/div[@class='fruit'][contains(.,'Orange')]]))Podrías hacer esto para combinar ambos,
unir estrechamente tanto al niño
$x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] and [./div/a/div/div[@class='fruit'][contains(.,'Orange')]])o tener uno de ellos y aun así desearía continuar.
$x(//*[@id="list-overview"]/div[./descendant::div[@data-price<=20]] or [./div/a/div/div[@class='fruit'][contains(.,'Orange')]]) Además, he incluido descendant para que sea más legible.