Python Selenium 数组

标签 python selenium selenium-webdriver

我正在尝试使用 selenium-webdriver 检查数组中的所有复选框。但我正在努力寻找正确的方法/功能,不知何故,整个代码非常困惑。

我有一个或多个像这样的数据箱:

<div class="data_row">
<span id="checkbox_detail_ONE" class="checkbox_detail">
<input type="checkbox" value="dir://TEST" name="file_list" onclick="check_enable_btn()">

从我想检查所有复选框的位置,除了名为 checkbox_detail_ONE 的复选框

在 python 中我尝试了这个,但我猜它是对 driver.find_elements_by_xpath() 的误解:

for i in driver.find_elements_by_xpath("//span[@class='checkbox_detail']"):
    if "ONE" in i.text:
        print "Keep "
    else: 
        print "Delete"
        i.click()

最佳答案

在尝试了您的代码的各个部分之后,它们似乎在大多数情况下都有效。您的问题可能出在排除 check_detail_ONE 复选框。 i.text 返回元素中包含的文本,但从您发布的代码来看,没有任何内容让我相信复选框将在其文本中包含一个。 对于您的排除,您将需要使用一个选择来专门选中此复选框。 Selenium 支持按 ID 选择,因此您可以使用以下内容:

driver.find_element_by_id("checkbox_detail_ONE")

或者如果您更喜欢使用 xpath:

driver.find_element_by_xpath("@id='checkbox_detail_ONE'")

如果你真的想确保它是一个跨度:

driver.find_element_by_xpath("//span[@id='checkbox_detail_ONE']")

这将导致以下代码:

for i in driver.find_elements_by_xpath("//span[@class='checkbox_detail']"):
    if i == driver.find_element_by_xpath("//span[@id='checkbox_detail_ONE']"):
        print "Keep "
    else: 
        print "Delete"

现在,由于我们要检查复选框,它们是独立的元素,我们需要 比较输入元素而不是它们包含的跨度。我们可以使用 xpath 的 /descendant:: 特性来选择这些元素,最终代码如下:

for i in driver.find_elements_by_xpath("//span[@class='checkbox_detail']/descendant::input"):
    if i == driver.find_element_by_xpath("//span[@id='checkbox_detail_ONE']/descendant::input"):
        pass # no action required
    else: 
        i.click()

关于Python Selenium 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28439150/

相关文章:

python - 如何拆分列表并将其打印在不同的行中?

python - 在 Selenium 上切换窗口

google-chrome - capybara 测试后 Chrome 驱动程序不会退出

java - 在哪里可以找到 ax with java 指南?

java - 如何在 selenium-java 中创建一个坐标实例?

java - 为 selenium webdriver 创建用户定义的函数

python - selenium python 无法与 phantomjs 一起使用

python - 如何使用 Python 运行删除 Web 请求?

python - 如何使用selenium python抓取多级下拉列表[依赖选择]

python - 在管理 Django CMS 中更改域名