Selênio: É possível concatenar um XPath com uma variável?
Pergunta
O XPath dos meus elementos estão se tornando extremamente difícil de ler.
// div [@ id = 'main_content'] / div [2] / div [2] / div [2] / div [4] / mesa / tbody / tr [2] / td / form / fieldset / P [1] / entrada
Seria bom se eu pudesse armazenar a maioria de que, como uma variável e usá-lo mais tarde como esta:
| assertElementPresent | $ {MyForm}. / Fieldset / p [1] / input |
É algo como isso é possível? Faria meus testes muito mais fácil de ler!
Solução
Você realmente deve ancorar seus espressions selênio em ID de elementos em seu lugar. Em 2 meses, ninguém vai ter a menor idéia do que os pontos XPath para, especialmente se o teste é quebrado no momento que você precisa descobrir. Rotineiramente adicionar de identificação para elemento apenas para fazer o teste mais fácil. Aprendemos a aceitar que escrever código java de uma maneira especial para torná-lo testável, e eu acho que é ok para HTML também.
Outras dicas
Você poderia simplesmente escrever:
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
Como disse Krosenvold, no entanto, longos XPaths pode ser muito frágil. Se a sua questão sobre a legibilidade em seu código, e quer todos os seus localizadores em um arquivo onde você pode fazer alterações em cascata, você pode querer considerar usando um mapa UI-Elemento.