需要帮助 locating/clicking 使用 selenium 位于 table 的下拉菜单
Need help locating/clicking a drop down located in table using selenium
我正在编写一个脚本来 locate/click 一个下拉菜单,然后使用 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>
虽然我不确定我是否理解您遇到(或试图解决)的问题是否足以提供帮助,但我会尽力。
如果我是您,尝试单击列表中的特定项目,我会首先创建一个包含这些项目的列表,然后循环遍历一次,一边单击一边单击。代码可能看起来像这样。
item_list = driver.find_elements_by_xpath('//button[@id="dropdownMenu1"]') #you can add further specifications as necessary
至少,如果您只是先创建要检查的项目列表,则可以取消几个 for loops
。 See docs.
这有什么帮助吗?我看到您已经在寻找元素(而不仅仅是单个元素),所以我可能对问题的理解不够透彻,无法提供充分的建议。考虑在评论中更详细地说明您的 problem/objective 或编辑您的问题。谢谢,祝你好运!
编辑:虽然我的回答中暗示了这一点,但我应该更清楚。我相信,如果您只是想通过循环和检查 reach 元素,那么使用 XPATH 可能是有意义的。它最适合在 XML 文档中查找非常具体(一次性)的元素。就我两便士。
第二次编辑:
这是您需要的 link 列表(我认为):
list_of_links = driver.find_elements_by_xpath('//li[@role="presentation"]/a') # len(list) == 99
然后,如上所述,您可以只循环这个列表和 .click()
每个 link。
for link in list_of_links:
link.click()
如果有效请告诉我。祝你好运!!
我正在编写一个脚本来 locate/click 一个下拉菜单,然后使用 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>
虽然我不确定我是否理解您遇到(或试图解决)的问题是否足以提供帮助,但我会尽力。
如果我是您,尝试单击列表中的特定项目,我会首先创建一个包含这些项目的列表,然后循环遍历一次,一边单击一边单击。代码可能看起来像这样。
item_list = driver.find_elements_by_xpath('//button[@id="dropdownMenu1"]') #you can add further specifications as necessary
至少,如果您只是先创建要检查的项目列表,则可以取消几个 for loops
。 See docs.
这有什么帮助吗?我看到您已经在寻找元素(而不仅仅是单个元素),所以我可能对问题的理解不够透彻,无法提供充分的建议。考虑在评论中更详细地说明您的 problem/objective 或编辑您的问题。谢谢,祝你好运!
编辑:虽然我的回答中暗示了这一点,但我应该更清楚。我相信,如果您只是想通过循环和检查 reach 元素,那么使用 XPATH 可能是有意义的。它最适合在 XML 文档中查找非常具体(一次性)的元素。就我两便士。
第二次编辑:
这是您需要的 link 列表(我认为):
list_of_links = driver.find_elements_by_xpath('//li[@role="presentation"]/a') # len(list) == 99
然后,如上所述,您可以只循环这个列表和 .click()
每个 link。
for link in list_of_links:
link.click()
如果有效请告诉我。祝你好运!!