Selenio: è possibile concatenare un xpath con una variabile?
Domanda
L'xpath dei miei elementi sta diventando estremamente difficile da leggere.
// div [@ id = 'main_content'] / div [2] / div [2] / div [2] / div [4] / table / tbody / tr [2] / td / form / fieldset / p [1] / input
Sarebbe bello se potessi memorizzare gran parte di ciò come variabile e usarlo in seguito in questo modo:
| assertElementPresent | $ {myForm}. / fieldset / p [1] / input |
È possibile qualcosa del genere? Renderebbe i miei test molto più facili da leggere!
Soluzione
Devi davvero ancorare le tue espressioni di selenio negli ID degli elementi. Tra 2 mesi, nessuno avrà la più pallida idea di ciò a cui punta lo xpath, specialmente se il test viene interrotto nel momento in cui è necessario scoprirlo. Aggiungiamo sistematicamente ID all'elemento solo per facilitare i test. Abbiamo imparato ad accettare che scriviamo il codice java in un modo speciale per renderlo testabile, e penso che vada bene anche per HTML.
Altri suggerimenti
Potresti semplicemente scrivere:
store | //div[@id='main_content']/div[2]/div[2]/div[2]/div[4]/table/tbody/tr[2]/td/form | myForm
assertElementPresent | xpath=${myForm}/fieldset/p[1]/input
Come diceva Krosenvold, tuttavia, i lunghi percorsi x possono essere piuttosto fragili. Se sei preoccupato per la leggibilità del tuo codice e desideri che tutti i tuoi localizzatori si trovino in un unico file in cui è possibile apportare modifiche a cascata, ti consigliamo di utilizzare una mappa degli elementi dell'interfaccia utente.