Domanda

Con ASP.NET gli ID dei tag sono piuttosto volatili in modo da rendere i miei test più robusto che voglio per individuare gli elementi da loro testi di etichette. Ho giocato un po 'con WatiN e lo fa perfettamente, ma quel progetto sembra tipo di morti al giorno d'oggi così ho pensato di guardare in selenio, nonché prima di decidere su un quadro.

Ho html che sembra qualcosa di simile

<label for="ctl00_content_loginForm_ctl01_username">Username</label>:
<input type="text" id="ctl00_content_loginForm_ctl01_username" />

Non voglio digitare:

selenium.Type("ctl00_content_loginForm_ctl01_username", "xxx");

Questo è troppo affidamento sulla ID. In WatiN mi piacerebbe scrivere:

browser.TextField(Find.ByLabelText("Username")).TypeText("xxx");

C'è un modo per fare questo in selenio?

È stato utile?

Soluzione

Credo che si può fare questo con il seguente:

selenium.Type(selenium.getAttribute("//label[text()='Username']/@for"), "xxx");

Il testo () = 'username' po 'ottiene l'etichetta che si desidera per la sua innerHTML, quindi il / @ per te restituisce il valore del suo attributo "per".

Heads Up: questa non è testato (! Scuse per questo), ma penso che funzionerà, sulla base di alcuni utensili in giro per il plug-in IDE

Altri suggerimenti

Questo funziona:

//input[@id=(//label[text()="Username"]/@for)]

Spiegazione: Dal momento che si sta cercando per l'ingresso:

//input[@id=("ctl00_content_loginForm_ctl01_username")]

sostituire "ctl00_content_loginForm_ctl01_username" per valore dell'attributo dell'etichetta:

//label[text()="Username"]/@for

Ok, questo può essere un anno ma quello che hey. Questo selezionerà il primo ingresso con un'etichetta contenente il testo 'nome utente'.

//label[text()='Username']/input

io in genere preferisco usare contiene () come trovo che alcuni browser sono l'aggiunta di spazi fastidiosi nell'elemento occasionale:

//label[contains(., 'Username')]/input

Si noti che la singola barra, prima dell'ingresso denota sarà solo guardare un livello inferiore, dove la doppia barra controllerebbe tutti i livelli sotto l'etichetta. Utilizzare XPather per Firefox per creare e controllare le XPaths, è molto utile.

Sì, è possibile utilizzare XPath, CSS o localizzatori DOM per identificare il vostro elemento. In questo esempio il vostro XPath potrebbe assomigliare // etichetta [@ per = 'ctl00_content_loginForm_ctl01_username'] per identificare quel particolare etichetta.

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