关键词SeleniumLibrary。元素应该是可见的用户名文档:验证由定位器标识的元素是可见的

时间:2019-08-27 14:39:19

标签: selenium-webdriver robotframework

我有带有多个“用户名”类的HTML,其中一个类在显示第一个时可见:

我的机器人框架代码无法将文本输入到显示的“用户名”区域,因为可见和不可见两者都具有相同的“用户名”名称。

我尝试使用xpath,但它会引起该错误;

InvalidElementStateException: Message: invalid element state: Element must be user-editable in order to clear it.

f12显示存在一种形式,其中不包括任何显示的内容和可见的“用户名”字段:

<form id="fm1" action="/cas/login?autocomplete="off"> <section style="display: none"> <input id="username" style="display: none" type="text" name="username-breaker" autocomplete="off"> <input id="password" style="display: none" type="password" name="password-breaker" autocomplete="off"> </section> <section> <label for="username"><span class="accesskey">U</span>sername:</label> <input id="username" name="username" class="form-control" tabindex="1" accesskey="u" type="text" value="" size="25" autocomplete="off"> </section>

如何在可见的“用户名”区域输入文本?

1 个答案:

答案 0 :(得分:0)

您有以下输入内容:

  1. <input id="username" style="display: none" type="text" name="username-breaker" autocomplete="off">
                         ^^^^^^^^^^^^^^^^^^^^
    

    这个是not visible,因此您无法与其互动

  2. <input id="username" name="username" class="form-control" tabindex="1" accesskey="u" type="text" value="" size="25" autocomplete="off">
    

    这是可见的并且可以交互

因此,您需要确定输入#2,可以使用以下XPath表达式来完成此操作:

//input[@id='username' and not(@style='display: none')]

演示:

enter image description here

更简单的选择是坚持使用name attribute,例如:

//input[@name='username']

参考文献: