Webdriver - 通过标签定位输入(Python)

时间:2014-10-08 19:40:07

标签: python selenium xpath selenium-webdriver webdriver

如何使用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>

2 个答案:

答案 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