我有以下html代码,我无法选中该复选框。
<table style="overflow:hidden;" cellpadding="0" cellspacing="0" border="0" role="presentation" class="table-header">
<tbody>
<tr>
<td class="cell-container cell-container-0 cell-selector locked xwtTable_1562932879200_0" role="presentation" columnidx="0" style="vertical-align: middle;width: 0px;" tabindex="0" aria-readonly="true">
<div class="cell cell-0 ellipsis no-wrapping cell-selector ellipsis no-wrapping xwtTable_1562932879200_0" role="columnheader" style="text-align: center;" title="">
<div tabindex="0" class="xwtSelectAll dijitCheckBox" "="" style="visibility:visible">
<input type="checkbox" class="select-all" style="visibility:visible">
</div>
</div>
</td>
</tr>
</tbody></table>
我收到超时异常:
element = wait.until(EC.element_to_be_clickable((By.XPATH, “ // div // input [@ class ='全选']”)))
回溯(最近通话最近): 在test_login中的文件“ TestHome.py”,第55行 s.filterclick() 文件“ C:/ Users / rakadali / PycharmProjects / CMM1 \ Pageobjects \ searchdevice.py”,第25行,在filterclick中 WebDriverWait(self.driver,20).until(EC.element_to_be_clickable((By.XPATH,“ // table [@ class ='table-header'] / tbody / tr / td // div [包含( @class,'dijitCheckBox')] / input [@ class ='select-all']“))))。click() 文件“ C:\ Program Files(x86)\ Python37-32 \ lib \ site-packages \ selenium \ webdriver \ support \ wait.py”,第80行,直到 引发TimeoutException(消息,屏幕,堆栈跟踪) selenium.common.exceptions.TimeoutException:消息:
下面是代码:
def filterclick(self):
try:
wait = WebDriverWait(self.driver, 80)
element =wait.until(EC.element_to_be_clickable((By.XPATH, "//div//input[@class='select-all']")))
element.click()
finally:
self.driver.close()
我要选中复选框
答案 0 :(得分:0)
尝试遵循 settings = {
edit: {
editButtonContent: '<nb-icon icon="brush"></nb-icon>',
saveButtonContent: '<nb-icon icon="checkmark"></nb-icon>',
cancelButtonContent: '<nb-icon icon="close-circle"></nb-icon>'
},
columns: {
device: {
title: 'Device',
sortDirection: 'asc'
},
type: {
title: 'Type',
sort: false,
filter: false
},
serialNumber: {
title: 'Serial Number'
},
status: {
title: 'Status'
}
}
};
来单击复选框。
xpath
答案 1 :(得分:0)
要选择此复选框,您需要为所需的element_to_be_clickable()
引入 WebDriverWait ,并且可以使用以下Locator Strategies:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "table.table-header>tbody>tr>td div.dijitCheckBox>input.select-all"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//table[@class='table-header']/tbody/tr/td//div[contains(@class, 'dijitCheckBox')]/input[@class='select-all']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
答案 2 :(得分:0)
在overlapped与另一个对象(即父项div)parent的情况下,复选框可能无法点击的情况,请尝试删除显式等待并尝试直接单击复选框,例如:
driver.find_elements_by_xpath("input[@class='select-all']").click()
WebDriver应该报告错误,说明为什么无法单击元素,这将使您对获得点击的元素有深刻的了解。
您也可以尝试点击XPath Axes div,例如:
element =wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@class='select-all']/parent::div")))
查看XPath Operators & Functions和iframe文章,以了解有关构建复杂XPath定位器的更多信息
要考虑的其他事项:
答案 3 :(得分:0)
第25行,在filterclick中,单击WebDriverWait(self.driver,20).until(EC.element_to_be_clickable((By.XPATH,“ // table [@ class ='table-header'] / tbody / tr / td // div [contains(@class,'dijitCheckBox')] / input [@ class ='select-all']“))))。click()
似乎您使用的是绝对xpath,在执行时可能会更改它,因此此xpath不再显示复选框。例外非常清楚。它说:“我在等待此复选框达80秒钟,但它并未显示在UI上,现在我已经完成等待。” 只需确保该元素在给定时间内可在UI上使用,并且可以使用您提供的正确选择器进行搜索。