Selenium Webdriver Python如何单击行表中的所有复选框

时间:2015-09-10 21:35:52

标签: python-2.7 selenium xpath selenium-webdriver webdriver

我有一个包含复选框行的html页面。我想找到表中的所有检查点并单击它。 我能做到这一点的最佳方式是什么? 我的第一次尝试我已经确定了具有复选框ID的表格

table_id = self.driver.find_element(By.ID, 'data_configuration_datamaps_ct_fields_body')

然后我获取所有行

rows = table_id.find_elements(By.TAG_NAME, "tr")

然后我使用for循环来遍历行。在每次迭代中,我找到了列

for row in rows:
    col_name = row.find_elements(By.TAG_NAME, "td")[0] 

然后我从列中找到该复选框并单击它。

col_checkbox = col_name.find_elements(By.XPATH, "//input[@type='checkbox']")
col.checkbox.click()

我做错了。做这个的最好方式是什么? 我正在使用Selenium Webdriver和Python

我的完整代码段如下:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

def delete_all_datamaps(self):
        try:
            WebDriverWait(self.driver, 20).until(EC.presence_of_all_elements_located((By.TAG_NAME, 'td')))
            table_id = self.driver.find_element(By.ID, 'data_configuration_datamaps_ct_fields_body')
            rows = table_id.find_elements(By.TAG_NAME, "tr")
            print "Rows length"
            print len(rows)
            for row in rows:
                # Get the columns
                col_name = row.find_elements(By.TAG_NAME, "td")[0]  # This is the 1st column
                print "col_name.text = "
                print col_name.text
                col_checkbox = col_name.find_elements(By.XPATH, "//input[@type='checkbox']")
                col.checkbox.click()
        except NoSuchElementException, e:
            return False
        return None

HTML是:

<table id="data_configuration_datamaps_ct_fields_body" cellspacing="0" style="table-layout: fixed; width: 100%;">
        <colgroup>
        <tbody>
            <tr class="GOFU2OVFG GOFU2OVMG" __gwt_subrow="0" __gwt_row="0">
                <td class="GOFU2OVEG GOFU2OVGG GOFU2OVHG GOFU2OVNG">
                    <div __gwt_cell="cell-gwt-uid-185" style="outline-style:none;" tabindex="0">
                        <input type="checkbox" tabindex="-1"/>
                    </div>
                </td>
                <td class="GOFU2OVEG GOFU2OVGG GOFU2OVNG">
                td class="GOFU2OVEG GOFU2OVGG GOFU2OVNG">
                td class="GOFU2OVEG GOFU2OVGG GOFU2OVBH GOFU2OVNG">
            </tr>
        </tbody>
        </table>

以下xpath将找到第一个复选框

//table[@id="data_configuration_datamaps_ct_fields_body"]//tr/td/div/input

我只需要找到此表中的复选框。

谢谢, 里亚兹

1 个答案:

答案 0 :(得分:1)

我不知道python,但我发现了一些代码,我认为它会起作用......或者至少足够接近你可以修复它但你想要的是一个CSS选择器。

checkboxes = driver.find_elements_by_css_selector("#data_configuration_datamaps_ct_fields_body input[type='checkbox']")
for checkbox in checkboxes:
    checkbox.click()

CSS选择器#data_configuration_datamaps_ct_fields_body input[type='checkbox']类似于查找标识为data_configuration_datamaps_ct_fields_body的元素,该元素具有INPUTtype checkbox的后代select . . ., min(case when substring(trans_id, 1, 1) between 'A' and 'Z' and substring(trans_id, 2, 1) between 'A' and 'Z' then NULL else SID end) 元素

在您点击以给页面提供一小段时间以响应点击后,您可能需要稍微暂停一下。你可以试试它,看看它是如何工作的。如果你需要暂停,它可能不需要很长,也许我会尝试50-100ms左右。

这是CSS Selector reference