我有带有多个“用户名”类的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>
如何在可见的“用户名”区域输入文本?
答案 0 :(得分:0)
您有以下输入内容:
<input id="username" style="display: none" type="text" name="username-breaker" autocomplete="off">
^^^^^^^^^^^^^^^^^^^^
这个是not visible,因此您无法与其互动
<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')]
演示:
更简单的选择是坚持使用name
attribute,例如:
//input[@name='username']
参考文献: