2016-12-30 8 views
2

In Winkelmesser gibt es eine handliche by.cssContainingText location strategy, die grundsätzlich zwei Dinge tun würde - ein Element (oder Elemente) durch einen CSS-Selektor suchen und prüfen, dass der Text des Elements eine gewünschte Zeichenfolge enthält. Beispiel:by.cssContainingText in Python/Selen

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

Wie dies in Python/Selen getan werden?

Beachten Sie, dass mir die XPath-Methode zur Überprüfung des Texts bekannt ist. Ich bin speziell daran interessiert, CSS-Selektoren zu verwenden und den Text eines Elements zu prüfen.

Antwort

1

Wenn wir uns die by.cssContainingText implementation ansehen, sehen wir, dass zuerst alle Elemente durch den CSS-Selektor lokalisiert werden und dann der Text der übereinstimmenden Elemente so geprüft wird, dass sie die gewünschte Zeichenkette enthalten.

Wir können die gleiche Logik in Python imitieren unsere eigene Locator zu erstellen:

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()) 

Dies ist allerdings nicht genau die gleiche Idee wie in Protractor da wir nicht querySelectorAll direkt verwenden, aber eine CSS-Selektor Suche machen durch die Python/Selenium "find" -Funktion.

Ich bin mir auch nicht sicher, ob wir die textContent und die innerText Werte überprüfen müssen - ich fühle, als würde die Überprüfung des "Textes" nur in der Praxis ausreichen.

+0

Haben Sie eine einfachere Methode zur Implementierung von CSS entwickelt: enthält? Klingt furchtbar komplex für ein einfaches CSS: Enthält Textmethode. // a [enthält (text(), "Log Out")] sieht viel besser aus als ein einfaches: contains ('Log Out') funktioniert leider nicht. –

+0

Auch wie können Sie eine Frage zu stellen und zu beantworten: antwortete am 30. Dezember 16 um 5:21? –

Verwandte Themen