【问题标题】:python selenium: iterate through radio buttons that have dynamic ids and selectpython selenium:遍历具有动态 id 的单选按钮并选择
【发布时间】:2017-01-04 22:59:46
【问题描述】:

使用 python + Selenium Web Driver,我正在尝试自动选择保险网站的某些单选按钮。问题是单选按钮的 ID 是动态的。例如,当生成一个新的保险申请时,会生成一个新页面,并且屏幕上的单选按钮具有动态创建的 ID(参见下面的 HTML 示例)

<div class="data">
<input type="radio" id="subj_received_33965" name="subj_status[33965]" value="received" class="radio form-element-left-radio"><label for="subj_received_33965" class="label-right">Received</label>
<input type="radio" id="subj_waived_33965" name="subj_status[33965]" value="waived" class="radio form-element-left-radio multi-radio-line-spacer" checked=""><label for="subj_waived_33965" class="label-right">Waived</label>
<input type="radio" id="subj_open_33965" name="subj_status[33965]" value="open" class="radio form-element-left-radio multi-radio-line-spacer"><label for="subj_open_33965" class="label-right">Open</label>
</div>

因此,使用上面的示例,我想单击 ID 为“subj_received_33965”的单选按钮。但是,由于元素是动态生成的,所以下一次自动化运行时 id 会有所不同(脚本会失败)。

我应该怎么做才能让脚本始终单击此页面上以“subj_received_”开头的元素,或者只选择值为“received”的元素?

谢谢

【问题讨论】:

    标签: python selenium-webdriver


    【解决方案1】:

    您始终可以通过 CSS 选择器或 XPath 应用部分匹配:

    driver.find_element_by_css_selector("input[id^=subj_received]")
    driver.find_element_by_css_selector("input[id*=subj_received]")
    

    其中^= 表示“开始于”,*= 表示“包含”。

    如果要检查value属性:

    driver.find_element_by_css_selector("input[value=received]")
    

    你可以同时检查:

    driver.find_element_by_css_selector("input[value=received][id^=subj_received]")
    

    【讨论】:

    • 我建议选择值。它似乎不太可能是动态的,并且还会产生更清晰的测试代码。
    【解决方案2】:

    来自 alecxe 的意见帮助我找到了可行的解决方案。

    我还让开发人员向 id 添加了一个整数值,这有助于找到正确的 id。

    下面的sn-p工作

    button = self.driver.find_element_by_css_selector('[id*="2_subj_received_"]')
    button.click()
    

    谢谢。

    【讨论】:

      猜你喜欢
      • 2018-04-16
      • 2020-09-27
      • 2021-12-23
      • 2023-02-09
      • 2020-11-25
      • 1970-01-01
      • 2016-05-18
      • 2021-01-19
      • 2019-05-04
      相关资源
      最近更新 更多