Webdriver - 通过标签定位输入(Python)
问题描述:
如何使用webdriver通过标签查找输入字段?Webdriver - 通过标签定位输入(Python)
我喜欢测试某个不幸使用动态生成的 ID的Web表单,因此它们不适合作为标识符。
然而,与每个网页元素相关的标签都适合我。 不幸的是,我无法做到这一点与网上提供的几个建议 。有一个线程在这里如此,但是这并没有 产生一个公认的答案:
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>
答
不幸的是,我无法在网站上使用CSS或XPATH表达式 。 ID和名称总是改变。
我发现我的问题的唯一解决方案是肮脏的 - 解析页面的源代码 并通过字符串操作提取ID。 当然,这不是网络驱动器打算使用的方式,但 它运作稳健。
代码:
lines = []
for line in driver.page_source.splitlines():
lines.append(line)
if 'LABEL TEXT 1' in line:
id_l1 = lines[-2].split('"', 2)[1]
答
你应该开始用一个div并检查是否有一个label
带内的恰当的span
,那么您可以通过span
标签input
元素与Text
类:
//div[@class='InputText' and contains(label/span, 'TEXT_TO_FIND')]/span[@class='Text']/input
你能做出这样的回答更加明确给我吗?也许取决于我给的例子html? – 2014-10-09 09:15:02
要使用上面提供的@alecxe,只需将他的“TEXT_TO_FIND”更改为“LABEL TEXT”(从您的示例中)。它会找到一个div,后面有一个标签,后跟一个带有文本“LABEL TEXT”的文本,如果你愿意的话,找到'home'点。然后在该div下找到类Text的范围,然后输入你想要的元素。 – 2014-10-10 09:31:29