我想单击表ID“ ContractDesc”,“ EEE”内容中的单元格:
HTML页面:
<table cellpadding="0" cellspacing="0" border="0" class="tablelist" id="table1" style="width: 80%; margin: 0px 0px 0px 0px;">
<thead>
<tr>
<th style="width: 30%">
AAA
</th>
<th>
BBB
</th>
<th style="width: 40%">
CCC
</th>
</tr>
</thead><tbody>
<tr id="1" onmouseout="fnMouseOut(1)" =="" ""="" onmouseover="fnMouseOver(1)" onclick="selectRow(this)" style="cursor: pointer; background-color: rgb(248, 248, 248);" projectid="111111">
<td align="center" name="contno">
DDD
</td>
<td name="ContractDesc">
EEE
</td>
<td name="">
FFF
</td>
</tr>
</tbody>
</table>
我的代码不起作用:
driver.find_element_by_xpath('//*[@id="1"]/td[2]').click()
和
driver.find_element_by_name("ContractDesc").click()
错误是:
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // * [@ id =” 1“] / td [ 2]“}
答案 0 :(得分:0)
尝试此XPath:
driver.find_element_by_xpath("//td[@name='ContractDesc']").click()
请检查该元素是否在iframe中,如果是,则需要使用以下命令将驱动程序切换到iframe:WebElement iFrame= driver.findElement(By.tagName("iframe"));
然后driver.switchTo().frame(iFrame);
,然后单击给定xpath,如果您想切换到默认上下文,则可以使用driver.switchTo().defaultContent();
答案 1 :(得分:0)
您可以使用下面的xpath通过名称和文本进行选择,normalize-space
删除所有空格:
//td[@name='ContractDesc' and normalize-space(.)='EEE']
答案 2 :(得分:0)
对于文本为 EEE 的元素,click()
可以使用以下任一解决方案:
使用CSS_SELECTOR
:
driver.find_element_by_css_selector("table.tablelist#table1 tr#1 td[name='ContractDesc']").click()
使用XPATH
:
driver.find_element_by_xpath("//table[@class='tablelist' and @id='table1']//tr[@id='1']//td[@name='ContractDesc' and normalize-space()='EEE']").click()