Como usar vários localizadores CSS como um localizador de selênio?
-
21-09-2019 - |
Pergunta
Estou tentando acertar um link em uma linha de tabela que contém vários links. Esse padrão é usado em toda a tabela.
Isso funciona:
browser.wait_for(:element => "css=tr:nth-child(1) li:nth-child(2) > a")
Isso não é:
browser.click "css=tr:nth-child(1) li:nth-child(2) > a"
Alguma ideia de por que isso pode ser? Estou usando o rubygem de selênio-cliente.
Solução
Suspeito que isso se deva a um bug no CSSQUERY, que o selênio atualmente usa para localizar elementos pelo CSS. Detalhes da questão e um patch podem ser encontrados nos comentários da questão a seguir: http://jira.openqa.org/browse/sel-698
Espero que ajude - acredito que o selênio 2 use uma biblioteca diferente para os localizadores CSS - possivelmente o chiado de jQuery (http://sizzlejs.com/), que deve resolver esse problema.
Dave.
Outras dicas
Para evitar problemas dolorosos de CSS como esse, instalei o JQuery como uma extensão do usuário. Ele fornece a capacidade de definir uma sequência de localizador semelhante ao CSS ("jQuery = td.dt-col-status div.dt-liner: contém ('complete')") que é muito mais poderoso. Posso expandir como fiz isso pelo Java RC, se você quiser.
Este é um bug no selênio 1, eu tentaria escrever todo o caminho no caminho do seu CSS e ver se isso ajuda.
ex Se você estiver usando o seguinte HTML, você pode usar o seguinte localizador CSS
<table> <tr> <td> <li> <a href="/yourlink" >
</li> </td> </tr> </table>
"css=tr:nth-child(1) > td > li:nth-child(2) > a"
Se isso não funcionar, você sempre pode usar o XPath. É tão expressivo quanto os localizadores CSS, mas tende a ter menos falhas. A única coisa que você precisa ter em mente ao usar o XPaths é que eles geralmente são mais lentos que os localizadores CSS.
"xpath=//tr/td//li[2]/a"