2016-12-30 21 views
2

在量角器中有一个方便的by.cssContainingText location strategy,它基本上可以做两件事 - 通过CSS选择器查找一个或多个元素,并检查元素的文本以包含所需的字符串。示例:Python中的cssContainingText/Selenium

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

这怎么能在Python/Selenium中完成?

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

回答

1

如果我们看一下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()) 

这虽然不是完全一样的想法,在量角器,因为我们没有使用querySelectorAll直接,但做一个CSS选择器搜索通过Python/Selenium的“查找”功能。

我也不确定我们是否需要检查textContentinnerText值 - 我觉得在实践中只检查“文本”就足够了。

+0

你制定了一个更简单的方法来实现css:contains?对于简单的CSS来说听起来非常复杂:包含文本方法。 // a [contains(text(),“Log Out”)]看起来很简单a:contains('Log Out')可悲的是不起作用。 – 2017-11-30 14:50:30

+0

另外你怎么能问和回答一个问题:回答12月30 '16在5:21? – 2017-11-30 15:00:01