[英]How to find element based on text and class with Selenium?
我有一个html表,我想根据文本在tbody
找到td
元素,如果其中不包含某个类。 它应该忽略任何在thead
即使文本存在。
...
<div id="mytable">
<div>
<table>
<thead>
<tr>....</tr>
...
</thead>
<tbody>
<tr>
<td class="inactive">3</td>
<td>4</td>
</tr>
</tbody>
</table>
</div>
</div>
...
这是代码:
def do_click(user_input):
browser = webdriver.Firefox()
browser.get(url)
mytable_div = browser.find_element_by_id("mytable")
element = mytable_div.find_element_by_xpath("//div/table/tbody/td[contains(text()='%s')]" % user_input)
if element:
element.click()
因此,如果user_input = 3
,则不应单击table元素,因为即使存在文本,它也具有inactive
的类。
如果user_input = 4
, 则应单击table元素,因为它没有不活动的类并且存在文本。
当前代码无法使用,因为我的xpath表达式无效,但是我不确定检查类和文本的正确方法是什么。
您走在正确的轨道上。 contains()
是一个函数,期望传入2个参数-查找的字符串和子字符串-的外观。 修正您的表情:
"//div/table/tbody//td[contains(text(), '%s')]" % user_input
在这种情况下,您也可以使用点而不是text()
。
并且,还要检查类是否inactive
,请添加“不包含”检查:
"//div/table/tbody//td[contains(., '%s')][not(contains(@class, 'inactive'))]" % user_input
至于逻辑,请处理NoSuchElementException
异常,如果引发异常,则表示未找到该元素,如果未引发异常,请单击该元素:
from selenium.common.exceptions import NoSuchElementException
try:
element = mytable_div.find_element_by_xpath("//div/table/tbody//td[contains(., '%s')][not(contains(@class, 'inactive'))]" % user_input)
element.click()
except NoSuchElementException:
print("Element not found")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.