繁体   English   中英

如何使用Selenium查找基于文本和类的元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM