Domanda

Ho una certa query XPath-query che utilizzo per ottenere l'altezza da un certo elemento HTML che mi restituisce perfettamente il valore desiderato quando lo eseguo in Chrome tramite il plugin-helper XPath.

//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
.

Tuttavia, quando utilizzo la stessa query tramite la parola chiave get element attribute-Thant nel framework robot

Get Element Attribute//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/@height
.

... Quindi ho ottenuto un'invaliditàSlencorexception su questo XPath.

InvalidSelectorException: Message: u'invalid selector: Unable to locate an 
element with the xpath expression `//*/div[@class="BarChart"]/*[name()="svg"]/*
[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"]/`
.

Allora, il framework del robot o il selenio ha rimosso il @ -Sign e tutto dopo di esso.Pensavo fosse un problema di fuga e aggiunto e ha aggiunto e rimosso alcune tazze davanti al @Height, ma senza successo.Ho anche provato a incapsulare il risultato di questa query nella stringa () - comando ma anche questo non ha avuto successo.

Qualcuno ha un'idea per impedire che la mia query XPath sia rotta?

È stato utile?

Soluzione

Sembra che non sia possibile includere l'asse di attributo nello XPath stesso quando stai usando Robot.È necessario recuperare l'elemento tramite XPath, quindi specificare il nome dell'attributo al di fuori di quello.Sembra che la sintassi sia qualcosa del genere:

 Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])@height 
.

o forse (non ho mai usato robot):

 Get Element Attribute xpath=(//*/div[@class="BarChart"]/*[name()="svg"]/*[name()="svg"]/*[name()="g"]/*[name()="rect" and @class="bar bar1"])[1]@height 
.

Questa documentazione dice

.
.

Attribute_Locator è costituito da locator elementi seguito da un nome @ segno e attributo, ad esempio "element_id @ class".

Quindi penso quello che ho postato sopra è sulla strada giusta.

Altri suggerimenti

Sei corretto nella tua osservazione che la parola chiave sembra rimuovere tutto dopo il @ finale.Più correttamente, utilizza il @ per separare il localizzatore di elementi dal nome dell'attributo, e lo spiega la stringa in quel carattere finale @.

Nessuna quantità di scappamento risolverà il problema in quanto il codice non sta facendo analisi a questo punto.Questo è il codice esatto (a partire da questo scritto ...) che esegue quell'operazione:

def _parse_attribute_locator(self, attribute_locator):
    parts = attribute_locator.rpartition('@')
    ...
.

La soluzione semplice è quella di abbandonare quella barra finale, quindi il tuo XPath sarà simile a questo:

//*/div[@class="BarChart"]/... and @class="bar bar1"]@height`
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top