tutorial chrome selenium-webdriver

selenium webdriver - chrome - Error de nombres de clase compuestos no permitidos Webdriver



selenium webdriver tutorial (6)

Estoy teniendo el siguiente error:

"Nombres de clase compuestos no permitidos"

Al intentar acceder al elemento web, donde el nombre de la clase del elemento tiene espacios en el medio. La fuente de la página para el elemento web es la siguiente.

driver.findElement(By.className("alert alert-success"));

<div class="alert alert-success" alert-dismissable"="" id="58417" style="display: none;"> <button type="button" class="close hide-panel close-icon-58417" data-dismiss="alert" aria-hidden="true" style="display: inline-block;">×</button><span id="caret-58417" class="notification-caret caret-58417"></span> <div class="hide-panel close-icon-58417" id="58417" style="display: block;"> <span class="glyphicon glyphicon-ok-sign"></span><strong>Success</strong> KeyLinks Updated Successfully <div class="notification-panel-body panel-body-58417">REST Invocation Success</div> </div> </div>

Traté de encontrar el elemento por la ruta CSS como se muestra a continuación. Pero el elemento no se puede buscar con esto.

driver.findElement(By.cssSelector(".alert alert-success"));

Esta fue la solución dada en el Enlace, pero todavía no tuvo éxito . Su ayuda será muy apreciada.


El problema se debe a la forma en que funciona Find by Class name.

en su código, el nombre de la clase es class="alert alert-success"

Si el nombre de la clase tiene espacio, obtendrá el error anterior. Simplemente puede deshacerse del problema utilizando Id, CSS, Xpath, expresión regular o cualquier otro método de búsqueda de elementos.

¿Necesita usar el nombre de la clase o puede usar otro método? Avísame si necesitas usar el nombre de la clase.


La mayoría de las veces el atributo de nombre de clase de cualquier elemento tiene nombres de grupos de clases. como class = ''alert alert-success otro nombre de clase''

si está utilizando el selector css, simplemente elimine los espacios entre los nombres de clase y cree su nombre clas como se muestra a continuación: driver.findElement (By.cssSelector (". alert.alert-success.another.class.name")

. => representar clase

=> representar ID

para selector de CSS.


Puede acceder al elemento si tiene varias clases usando "Por":

from selenium.webdriver.common.by import By driver.findElement(By.cssSelector(".alert.alert-success"));


Puedes usar

driver.findElement(By.className("alert-success"));

o

driver.findElement(By.className("alert"));

Como en este momento, el selenio no es compatible con el nombre de varias clases. Si el nombre de su clase incluye un espacio, WebDriver lo verá como un "selector compuesto". Puede usar cssSelector o id para seleccionar el webelement.


Si se debe usar el nombre de la clase, puede usar las siguientes formas:

1) selectores css :

driver.findElement(By.cssSelector(".alert.alert-success");

2) usando xpath

driver.findElement(By.xpath("//div[@class=''alert alert-success'']"))

Intente evitar xpath y use selectores css en su lugar.


También se puede hacer usando el nombre de la clase como:

driver.find_element_by_class_name("alert")

o

driver.find_element_by_class_name("alert-success")

puede seleccionar cualquier nombre de clase de dos o más nombres de clase separados por espacios, funcionará bien.