python - Python/Selenium 中的 by.cssContainingText

标签 python selenium css-selectors protractor

Protractor 中有一个方便的 by.cssContainingText location strategy这基本上会做两件事 - 通过 CSS 选择器定位一个元素(或多个元素)并检查元素的文本是否包含所需的字符串。示例:

var elm = element(by.cssContainingText('#myid .myclass', 'Some Text'));
expect(elm.isDisplayed()).toBe(true);

这如何在 Python/Selenium 中完成?

请注意,我知道检查文本的 XPath 方式。我特别感兴趣的是使用 CSS 选择器和检查元素的文本。

最佳答案

如果我们看一下 by.cssContainingText implementation ,我们可以看到,首先,它通过 CSS 选择器定位所有元素,然后检查匹配元素的文本是否包含所需的字符串。

我们可以在 Python 中模仿相同的逻辑来创建我们自己的自定义定位器:

def by_css_containing_text(driver, selector, text):
    elements = driver.find_elements_by_css_selector(selector)
    return [element for element in elements 
            if text in (element.text or 
                        element.get_attribute("textContent") or 
                        element.get_attribute("innerText"))]

# usage
driver = webdriver.Firefox()
driver.get(url)

elements = by_css_containing_text(driver, '#myid .myclass', 'Some Text')
self.assertTrue(elements)
self.assertTrue(elements[0].is_displayed())

这与 Protractor 中的想法并不完全相同,因为我们没有直接使用 querySelectorAll,而是通过 Python/Selenium“查找”功能进行 CSS 选择器搜索。

我也不确定我们是否必须检查 textContentinnerText 属性值 - 我觉得只检查“文本”就足够了实践。

关于python - Python/Selenium 中的 by.cssContainingText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41391028/

相关文章:

selenium - Web 驱动程序在检查元素的不可见性时不等待指定的时间限制

CSS 选择器后代选择器

Python错误: global declared variable is not declared in the global scope

Python重采样实现如Matlab的Signal Toolbox的重采样函数

c++ - 可以加载 C/C++ 和 Python 插件的应用程序

c# - 如何判断一个元素是否与CSS选择器匹配?

python - 用 "SAD"或 "HAPPY"替换表情符号的代码无法正常工作

python - 如何使用 selenium python chromedriver 循环访问多个 url 并在新选项卡中打开 url

css - 如何将一个规则应用于多个选择器

selenium - 在影子DOM中查找元素