Python 需要使用selenium查找/单击位于表中的下拉列表的帮助吗

Python 需要使用selenium查找/单击位于表中的下拉列表的帮助吗,python,python-2.7,selenium,selenium-webdriver,Python,Python 2.7,Selenium,Selenium Webdriver,我正在编写一个脚本,使用selenium和python查找/单击下拉列表,并单击所选下拉列表中的任何项目 下面是代码,希望您的帮助使其更好,如果它是正确的,如果它不是正确的方式做它 代码段: table1 = self.browser.find_element_by_id('user-list-table') trows = table1.find_elements_by_tag_name('tr') for trow in trows: tcols = trow.find_elemen

我正在编写一个脚本,使用selenium和python查找/单击下拉列表,并单击所选下拉列表中的任何项目

下面是代码,希望您的帮助使其更好,如果它是正确的,如果它不是正确的方式做它

代码段:

table1 = self.browser.find_element_by_id('user-list-table')
trows = table1.find_elements_by_tag_name('tr')
for trow in trows:
    tcols = trow.find_element_by_tag_name('td')
    for tcol in tcols:
        if tcol ==("//button[@id='dropdownMenu1'][3]"):
            self.browser.find_element_by_xpath(tcol).click()
            self.browser.find_element_by_link("//a[contains(text(),'Edit User')][3]").click()
HTML代码段:

<table class="table table-bordered table-striped datatable" id="user-list-table">
                <thead>
                    <tr>
                        <th>Status</th>
                        <th>First Name</th>
                        <th>Last Name</th>
                        <th>Employee ID</th>
                        <th>Patient Load<br>Permanent | Temporary</th>
                        <th>No. of Tasks<br>Priority | Total</th>
                        <th>Tasks Per Day (completed)<br>Week | Month | Quarter</th>
                        <th class="text-right">User Actions</th>
                    </tr>
                </thead>
                <tbody>
                    <tr class="odd">
                        <td class="text-center"><i class="status status-available">01</i></td>
                        <td>Tracy</td>
                        <td>Jones</td>
                        <td>1001</td>
                        <td>10 | 5</td>
                        <td>30 | 50</td>
                        <td>45 | 60 | 50</td>
                        <td class="text-right">
                            <div class="dropdown">
                              <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">
                                User Actions
                                <span class="caret"></span>
                              </button>
                              <ul class="dropdown-menu dropdown-menu-right" role="menu">
                                <li role="presentation"><a role="menuitem" tabindex="-1" href="patient-assignment.html"><i class="fa fa-exchange"></i> Assign Patients</a></li>
                                <li role="presentation"><a role="menuitem" tabindex="-1" href="#" data-toggle="modal" data-target="#User-Calendar-Today"><i class="fa fa-calendar"></i> Todays Availability</a></li>
                                <li role="presentation"><a role="menuitem" tabindex="-1" href="user-profile.html"><i class="fa fa-user"></i> View Profile</a></li>
                                <li role="presentation"><a role="menuitem" tabindex="-1" href="user-account.html"><i class="fa fa-pencil"></i> Edit User</a></li>
                                <li role="presentation" class="divider"></li>
                                <li role="presentation"><a role="menuitem" tabindex="-1" href="#"><i class="fa fa-times-circle"></i> Deactivate User</a></li>
                              </ul>
                            </div>
                        </td>
                    </tr>

地位
名字
姓
员工ID
患者负荷
永久性|临时性 任务数量
优先级|总数 每日任务(已完成)
周|月|季度 用户操作 01 特雷西 琼斯 1001 10 | 5 30 | 50 45 | 60 | 50 用户操作

虽然我不确定我是否了解您遇到的(或试图解决的)问题是否能够提供帮助,但我会尝试

如果我是你,尝试单击列表中的特定项目,我会首先创建这些项目的列表,然后在其中循环一次,边走边单击。代码可能是这样的

item_list = driver.find_elements_by_xpath('//button[@id="dropdownMenu1"]') #you can add further specifications as necessary
至少,如果您只需首先创建一个要检查的项目列表,就可以对循环禁用几个

这有帮助吗?我发现您已经找到了元素(而不仅仅是一个元素),因此我可能对问题的理解不够透彻,无法给出完整的建议。考虑在评论或编辑你的问题上提供更多的关于你的问题/目标的澄清。谢谢,祝你好运

编辑:虽然我的回答暗示了这一点,但我应该更清楚。我相信,如果您只是试图通过循环和检查访问元素,那么使用XPATH可能是有意义的。它最适合在XML文档中查找非常特定(一次性)的元素。就我的一便士

第二次编辑:

以下是您需要的链接列表(我认为):

然后,如上所述,您可以循环此列表并
。单击()
每个链接

for link in list_of_links:
    link.click()

让我知道它是否有效。祝你好运

我的HTML文件太长,无法在此发布。有没有其他方法可以共享它。jsfiddle在这里。请让我知道这是否有帮助错误是什么?在上面的代码中,我没有考虑@KK16,你有链接吗?或者它只是一个html文档?我的理解是,不需要使用div,特别是如果所有嵌套项共享一个类和一个更显著的特征。使用xpath应该就足够了。我刚刚得到了HTML文档,我没有真正的链接,下面是HTML文档的链接,希望这有帮助。jsfiddle.net有HTML和结果(页面和下拉列表在结果窗口中的样子)@KK16就足够了。你能给我一些你想要返回的元素的例子吗?@Bee Smears,我的目标是单击表中的任何一行,控制最后一列[td]中的下拉列表然后单击任何下拉项[应用程序中其他页面的链接]。虽然我不知怎么地完成了一半,但通过上面发布的链接阅读让我对我的方法产生了疑问。希望我的问题是清楚的。
for link in list_of_links:
    link.click()