python - example - selectores selenium
by.cssContainingText en Python/Selenium (1)
En Transportador hay una práctica estrategia de ubicación by.cssContainingText
que básicamente hace dos cosas: ubicar un elemento (o elementos) mediante un selector de CSS y verificar que el texto del elemento contenga la 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 conozco la forma de comprobar el texto en XPath. Me interesa específicamente usar selectores de CSS y verificar el texto de un elemento.
Si observamos la implementación by.cssContainingText
, podemos ver que, primero, localiza todos los elementos mediante el selector CSS y luego verifica que el texto de los elementos coincidentes contenga 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())
Aunque no es exactamente la misma idea que en Transportador, ya que no estamos utilizando querySelectorAll
directamente, sino que querySelectorAll
una búsqueda del selector de CSS a través de la función "buscar" de Python / Selenium.
Tampoco estoy seguro de si tenemos que verificar el textContent
y los valores de texto innerText
. Siento que revisar el "texto" solo sería suficiente en la práctica.