如何使用webdriver在其标签上找到输入字段?
我喜欢测试一个不幸使用动态生成的Web表单 ID,因此它们不适合作为标识符。
然而,与每个网络元素相关联的标签让我觉得合适。 不幸的是,我无法用少数建议来做到这一点 在网上提供。在SO有一个线程,但没有 得出一个可接受的答案:
Selenium WebDriver Java - Clicking on element by label not working on certain labels
要在Java中解决这个问题,通常建议通过文本内容将标签定位为锚点,然后指定输入元素的xpath:
//label[contains(text(), 'TEXT_TO_FIND')]
我不知道如何在python中执行此操作。 我的网络元素:
<div class="InputText">
<label for="INPUT">
<span>
LABEL TEXT
</span>
<span id="idd" class="Required" title="required">
*
</span>
</label>
<span class="Text">
<input id="INPUT" class="Text ColouredFocus" type="text" onchange="var wcall=wicketAjaxPost(';jsessionid= ... ;" maxlength="30" name="z1013400259" value=""></input>
</span>
<div class="RequiredLabel"> … </div>
<span> … </span>
</div>
答案 0 :(得分:1)
不幸的是我无法使用CSS或XPATH表达式 在网站上。 ID和名称总是更改。
我发现问题的唯一解决方案是脏问题 - 解析 页面的源代码并通过字符串操作提取ID。 当然,这不是webdriver的使用方式,但是 它运作稳健。
代码:
lines = []
for line in driver.page_source.splitlines():
lines.append(line)
if 'LABEL TEXT 1' in line:
id_l1 = lines[-2].split('"', 2)[1]
答案 1 :(得分:0)
您应该从div开始并检查内部是否有label
span
,然后使用{input
标记获取span
元素{1}}:
Text