En Protractor hay una práctica estrategia de ubicación by.cssContainingText
que básicamente haría dos cosas: ubicar un elemento (o elementos) mediante un selector de CSS y verificar que el texto del elemento contenga una cadena deseada. Muestra:
var elm = element(by.cssContainingText('#myid .myclass', 'Some Text')); expect(elm.isDisplayed()).toBe(true);
¿Cómo se puede hacer esto en Python / Selenium?
Tenga en cuenta que soy consciente de la forma XPath de comprobar el texto. Me interesa específicamente usar los selectores de CSS y verificar el texto de un elemento.
Si observamos la implementación de by.cssContainingText
, podemos ver que, primero, localiza todos los elementos mediante el selector de CSS y luego verifica el texto de los elementos coincidentes para contener la cadena deseada.
Podemos imitar la misma lógica en Python para crear nuestro propio localizador personalizado:
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())
Sin embargo, esta no es exactamente la misma idea que en Protractor, ya que no estamos usando querySelectorAll
directamente, sino que querySelectorAll
una búsqueda en el selector de CSS a través de la función “buscar” de Python / Selenium.
Tampoco estoy seguro de si tenemos que verificar los textContent
los atributos textContent
y innerText
. Siento que comprobar que el “texto” solo sería suficiente en la práctica.