switch_to - ¿Cómo puedo encontrar un elemento que contenga texto específico en Selenium Webdriver(Python)?
use selenium python (5)
Prueba esto. Es muy fácil:
driver.getPageSource().contains("text to search");
Esto realmente funcionó para mí en el controlador web de selenio.
Estoy intentando probar una interfaz de JavaScript complicada con Selenium (usando la interfaz de Python, y en varios navegadores). Tengo varios botones del formulario:
<div>My Button</div>
Me gustaría poder buscar botones basados en "Mi botón" (o coincidencias parciales que no distinguen entre mayúsculas y minúsculas, como "mi botón" o "botón")
Estoy encontrando esto increíblemente difícil, en la medida en que siento que me falta algo obvio. Lo mejor que tengo hasta ahora es:
driver.find_elements_by_xpath(''//div[contains(text(), "'' + text + ''")]'')
Sin embargo, esto es sensible a mayúsculas y minúsculas. La otra cosa que he intentado es iterar a través de todos los divs en la página y verificar la propiedad de element.text. Sin embargo, cada vez que obtiene una situación del formulario:
<div class="outer"><div class="inner">My Button</div></div>
div.outer también tiene "Mi botón" como texto. Para arreglar ESO, he intentado ver si div.outer es el padre de div.inner, pero no pude encontrar la manera de hacerlo (element.get_element_by_xpath (''..'') devuelve el elemento primario de un elemento, pero pruebas no iguales a div.outer). Además, iterar a través de todos los elementos en la página parece ser muy lento, al menos usando el controlador de Chrome.
Ideas?
Editar: Esta pregunta salió un poco vaga. Se le preguntó (y contestó) una versión más específica aquí: ¿Cómo obtener el texto de un elemento en Selenium WebDriver (a través de la API de Python) sin incluir el texto del elemento secundario?
Pruebe lo siguiente:
driver.find_elements_by_xpath("//*[contains(text(), ''My Button'')]")
También puede usarlo con el patrón de objeto de página, por ejemplo:
Prueba este código:
@FindBy(xpath = "//*[contains(text(), ''Best Choice'')]")
WebElement buttonBestChoice;
podrías probar un xpath como:
''//div[contains(text(), "{0}") and @class="inner"]''.format(text)
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(), ''YourTextHere'')]")));
assertNotNull(driver.findElement(By.xpath("//*[contains(text(), ''YourTextHere'')]")));
String yourButtonName=driver.findElement(By.xpath("//*[contains(text(), ''YourTextHere'')]")).getAttribute("innerText");
assertTrue(yourButtonName.equalsIgnoreCase("YourTextHere"));