【问题标题】:Webdriver - Locate Input via Label (Python)Webdriver - 通过标签定位输入(Python)
【发布时间】:2023-03-27 12:56:01
【问题描述】:

如何使用 webdriver 通过标签定位输入字段?

我喜欢测试一个不幸地使用动态生成的网络表单 ids,所以它们不适合作为标识符。

然而,与每个网络元素相关的标签让我觉得很合适。 不幸的是,我无法通过一些建议来做到这一点 在网络上提供。 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>

【问题讨论】:

    标签: python selenium xpath selenium-webdriver webdriver


    【解决方案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]
    

    【讨论】:

      【解决方案2】:

      您应该从一个 div 开始,并检查其中是否有一个带有适当 spanlabel,然后从 span 标记中获取 input 元素,类为 Text

      //div[@class='InputText' and contains(label/span, 'TEXT_TO_FIND')]/span[@class='Text']/input
      

      【讨论】:

      • 你能给我更明确的答案吗?也许在我给出的示例 html 上定位?
      • 要使用上面提供的@alecxe,只需将他的“TEXT_TO_FIND”更改为“LABEL TEXT”(来自您的示例)。它将找到一个 div,该 div 有一个标签,后跟一个带有文本“LABEL TEXT”的跨度,如果你愿意,可以找到“home”点。然后在该 div 下找到带有 Text 类的跨度,然后是您想要的输入元素。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多