Python Selenium选择表中的第一行,即使I';我正在逐行迭代

Python Selenium选择表中的第一行,即使I';我正在逐行迭代,python,python-3.x,selenium,xpath,selenium-chromedriver,Python,Python 3.x,Selenium,Xpath,Selenium Chromedriver,我真的不知道这里发生了什么,也弄不清楚,所以希望有人能帮助我 本质上,我选择一个表,然后查找该表中的所有行。从这里开始,我在各行中循环,选择三个复选框,并检查它们是否被选中。然而,我得到的每一行的结果总是第一行的结果。比如说 假的 真的 假的 然后 假的 真的 假的 它应该在什么时候改变每一行 Python/Selenium代码: table = driver.find_element_by_xpath("//table[@id='tableMscRatesModal']/tbody") row

我真的不知道这里发生了什么,也弄不清楚,所以希望有人能帮助我

本质上,我选择一个表,然后查找该表中的所有行。从这里开始,我在各行中循环,选择三个复选框,并检查它们是否被选中。然而,我得到的每一行的结果总是第一行的结果。比如说

假的 真的 假的

然后

假的 真的 假的

它应该在什么时候改变每一行

Python/Selenium代码:

table = driver.find_element_by_xpath("//table[@id='tableMscRatesModal']/tbody")
rows = table.find_elements(By.XPATH, "//tr[@class='ng-scope']") # get all of the rows in the tables

for row in rows:
    print(row.text)

    manager_box = row.find_element_by_xpath("//td/input[@type='radio'][contains(@name, 'userRole')][@value='1']")
    standard_box = row.find_element_by_xpath("//td/input[@type='radio'][contains(@name, 'userRole')][@value='2']")
    no_box = row.find_element_by_xpath("//td/input[@type='radio'][contains(@name, 'userRole')][@value='3']")

    print(manager_box.is_selected())
    print(standard_box.is_selected())
    print(no_box.is_selected())

    if not (manager_box.is_selected() or standard_box.is_selected() or no_box.is_selected()):
        standard_box.send_keys(Keys.SPACE)
<table id="tableMscRatesModal" ng-table="tableParams" class="table table-striped table-bordered" show-filter="false">
    <colgroup>
        <col span="1" style="width: 13%;">
            <col span="1" style="width: 13%;">
                <col span="1" style="width: 8%;">
                    <col span="1" style="width: 8%;">
                        <col span="1" style="width: 8%;">
                            <col span="1" style="width: 25%;">
                                <col span="1" style="width: 25%;">
    </colgroup>
    <tbody>
        <tr>
            <th>First name</th>
            <th>Last name</th>
            <th>Manager</th>
            <th>Standard user</th>
            <th>No access</th>
            <th>Proposed change</th>
            <th ng-show="iAmRequestManagerWithProposals(getUserList())" class="ng-hide">
                Approval
                <br>
                <br>
                <div class="row approvals">
                    <div class="col-xs-12">
                        <div class="input-group">
                            <span class="input-group-addon">
                                <label ng-click="rejectAll()">
                                    <input type="radio" name="rejectapproveall" id="rejectall" value="rejectall">
                                    Reject all
                                </label>
                            </span>
                            <span class="input-group-addon">
                                <label ng-click="approveAll()">
                                    <input type="radio" name="rejectapproveall" id="acceptall" value="acceptall">
                                    Approve all
                                </label>
                            </span>
                        </div>
                    </div>
                </div>
            </th>
        </tr>
        <!-- ngRepeat: accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName'] -->
        <tr ng-repeat="accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName']" class="ng-scope">
            <td class="ng-binding">First Name</td>
            <td class="ng-binding">Last Name</td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.manager" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="1">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.stdUser" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="2">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.noAccess" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="3">
            </td>
            <td>
                <span ng-show="accessUser.proposedRoleId" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="getRoleChangeProposal(accessUser)" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    Pending manager approval
                </span>
                <span ng-show="accessUser.isAmsAdmin" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="amsAdminUserTooltip" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    AMS admin user
                </span>
            </td>
            <td ng-show="iAmRequestManagerWithProposals(getUserList())" class="ng-hide">

                <div class="row approvals">
                    <div class="col-xs-12">
                        <div class="input-group ng-hide" ng-show="accessUser.proposedRoleId &amp;&amp; accessUser.proposedRoleId > 0">
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.rejected)">
                                    <input type="radio" name="rejectapprove" id="reject" value="rejected" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Reject
                                </label>
                            </span>
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.approved)">
                                    <input type="radio" name="rejectapprove" id="accept" value="approved" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Approve
                                </label>
                            </span>
                        </div>
                    </div>
                </div>

            </td>
        </tr>
        <!-- end ngRepeat: accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName'] -->
        <tr ng-repeat="accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName']" class="ng-scope">
            <td class="ng-binding">First Name</td>
            <td class="ng-binding">Last Name</td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.manager" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="1">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.stdUser" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="2">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.noAccess" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="3">
            </td>
            <td>
                <span ng-show="accessUser.proposedRoleId" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="getRoleChangeProposal(accessUser)" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    Pending manager approval
                </span>
                <span ng-show="accessUser.isAmsAdmin" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="amsAdminUserTooltip" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    AMS admin user
                </span>
            </td>
            <td ng-show="iAmRequestManagerWithProposals(getUserList())" class="ng-hide">

                <div class="row approvals">
                    <div class="col-xs-12">
                        <div class="input-group ng-hide" ng-show="accessUser.proposedRoleId &amp;&amp; accessUser.proposedRoleId > 0">
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.rejected)">
                                    <input type="radio" name="rejectapprove" id="reject" value="rejected" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Reject
                                </label>
                            </span>
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.approved)">
                                    <input type="radio" name="rejectapprove" id="accept" value="approved" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Approve
                                </label>
                            </span>
                        </div>
                    </div>
                </div>

            </td>
        </tr>
我在下面列出了两行的示例。对于x数量的行,重复的次数完全相同

HTML:

table = driver.find_element_by_xpath("//table[@id='tableMscRatesModal']/tbody")
rows = table.find_elements(By.XPATH, "//tr[@class='ng-scope']") # get all of the rows in the tables

for row in rows:
    print(row.text)

    manager_box = row.find_element_by_xpath("//td/input[@type='radio'][contains(@name, 'userRole')][@value='1']")
    standard_box = row.find_element_by_xpath("//td/input[@type='radio'][contains(@name, 'userRole')][@value='2']")
    no_box = row.find_element_by_xpath("//td/input[@type='radio'][contains(@name, 'userRole')][@value='3']")

    print(manager_box.is_selected())
    print(standard_box.is_selected())
    print(no_box.is_selected())

    if not (manager_box.is_selected() or standard_box.is_selected() or no_box.is_selected()):
        standard_box.send_keys(Keys.SPACE)
<table id="tableMscRatesModal" ng-table="tableParams" class="table table-striped table-bordered" show-filter="false">
    <colgroup>
        <col span="1" style="width: 13%;">
            <col span="1" style="width: 13%;">
                <col span="1" style="width: 8%;">
                    <col span="1" style="width: 8%;">
                        <col span="1" style="width: 8%;">
                            <col span="1" style="width: 25%;">
                                <col span="1" style="width: 25%;">
    </colgroup>
    <tbody>
        <tr>
            <th>First name</th>
            <th>Last name</th>
            <th>Manager</th>
            <th>Standard user</th>
            <th>No access</th>
            <th>Proposed change</th>
            <th ng-show="iAmRequestManagerWithProposals(getUserList())" class="ng-hide">
                Approval
                <br>
                <br>
                <div class="row approvals">
                    <div class="col-xs-12">
                        <div class="input-group">
                            <span class="input-group-addon">
                                <label ng-click="rejectAll()">
                                    <input type="radio" name="rejectapproveall" id="rejectall" value="rejectall">
                                    Reject all
                                </label>
                            </span>
                            <span class="input-group-addon">
                                <label ng-click="approveAll()">
                                    <input type="radio" name="rejectapproveall" id="acceptall" value="acceptall">
                                    Approve all
                                </label>
                            </span>
                        </div>
                    </div>
                </div>
            </th>
        </tr>
        <!-- ngRepeat: accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName'] -->
        <tr ng-repeat="accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName']" class="ng-scope">
            <td class="ng-binding">First Name</td>
            <td class="ng-binding">Last Name</td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.manager" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="1">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.stdUser" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="2">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.noAccess" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="3">
            </td>
            <td>
                <span ng-show="accessUser.proposedRoleId" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="getRoleChangeProposal(accessUser)" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    Pending manager approval
                </span>
                <span ng-show="accessUser.isAmsAdmin" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="amsAdminUserTooltip" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    AMS admin user
                </span>
            </td>
            <td ng-show="iAmRequestManagerWithProposals(getUserList())" class="ng-hide">

                <div class="row approvals">
                    <div class="col-xs-12">
                        <div class="input-group ng-hide" ng-show="accessUser.proposedRoleId &amp;&amp; accessUser.proposedRoleId > 0">
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.rejected)">
                                    <input type="radio" name="rejectapprove" id="reject" value="rejected" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Reject
                                </label>
                            </span>
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.approved)">
                                    <input type="radio" name="rejectapprove" id="accept" value="approved" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Approve
                                </label>
                            </span>
                        </div>
                    </div>
                </div>

            </td>
        </tr>
        <!-- end ngRepeat: accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName'] -->
        <tr ng-repeat="accessUser in manageAccessControl.usersAndRoles | orderBy:['sortOrder','lastName','firstName']" class="ng-scope">
            <td class="ng-binding">First Name</td>
            <td class="ng-binding">Last Name</td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.manager" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="1">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.stdUser" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="2">
            </td>
            <td>
                <input type="radio" name="userRole" ng-value="hmwAccess.roles.noAccess" ng-model="accessUser.selectedRoleId" ng-disabled="accessUser.proposedRoleId || accessUser.isAmsAdmin" class="ng-pristine ng-untouched ng-valid ng-not-empty" value="3">
            </td>
            <td>
                <span ng-show="accessUser.proposedRoleId" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="getRoleChangeProposal(accessUser)" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    Pending manager approval
                </span>
                <span ng-show="accessUser.isAmsAdmin" class="ng-hide">
                    <img tooltip-placement="left" tooltip-append-to-body="true" uib-tooltip-html="amsAdminUserTooltip" src="/img/infoIcon.png" style="width: 12px; height: 12px">
                    AMS admin user
                </span>
            </td>
            <td ng-show="iAmRequestManagerWithProposals(getUserList())" class="ng-hide">

                <div class="row approvals">
                    <div class="col-xs-12">
                        <div class="input-group ng-hide" ng-show="accessUser.proposedRoleId &amp;&amp; accessUser.proposedRoleId > 0">
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.rejected)">
                                    <input type="radio" name="rejectapprove" id="reject" value="rejected" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Reject
                                </label>
                            </span>
                            <span class="input-group-addon">
                                <label ng-click="setApprovalForUser(accessUser, hmwAccess.rejectApprove.approved)">
                                    <input type="radio" name="rejectapprove" id="accept" value="approved" ng-model="accessUser.rejectApprove" class="ng-pristine ng-untouched ng-valid ng-empty">
                                    Approve
                                </label>
                            </span>
                        </div>
                    </div>
                </div>

            </td>
        </tr>

名字
姓
经理
标准用户
禁止进入
拟议变更
批准


全部拒绝 全部批准 名字 姓 待经理批准 AMS管理员用户 拒绝 批准 名字 姓 待经理批准 AMS管理员用户 拒绝 批准

提前谢谢

使用
xpath
从另一个元素定位元素时,需要使用当前上下文

for row in rows:
    manager_box = row.find_element_by_xpath(".//td/input[@type='radio'][contains(@name, 'userRole')][@value='1']")
    standard_box = row.find_element_by_xpath(".//td/input[@type='radio'][contains(@name, 'userRole')][@value='2']")
    no_box = row.find_element_by_xpath(".//td/input[@type='radio'][contains(@name, 'userRole')][@value='3']")
如果使用列表,还可以简化代码

checkboxes = row.find_elements_by_xpath(".//td/input[@type='radio'][contains(@name, 'userRole')]")
for checkbox in checkboxes:
    print(checkboxes.is_selected())
如果您放下
打印(行)


这是单选按钮而不是复选框。但是,您不能一次选择所有单选按钮。这适用于复选框一次选择所有复选框。您一次只能选择一个单选按钮。正是这样。现在看起来很简单,但我从来没有发现过。非常感谢你的帮助。你有没有问过自己为什么你永远不会发现它?是不是因为您在语言中使用了结构(如“/”),而不理解它们的含义?在开始编写代码之前,通过阅读更多的内容,您是否可以节省大量时间?