Estoy tratando de hacer clic en la casilla de verificación dentro de la celda de datos td, pero cada vez que obtengo:

org.openqa.selenium.ElementNotVisibleException

Excepción, el problema es que el elemento está habilitado pero no visible.

A continuación se muestra la fuente de la página:

<table id='table1'>
    <thead></thead>
    <tbody>
        <tr>
            <td>
            <input id='id1' class='class' type='checkbox'>
            <label for='chk1'>
            :: before
            </label>
            </td>
        </tr>
        <tr>
            <td>
            <input id='id2' class='class' type='checkbox'>
            <label for='chk2'>
            :: before
            </label>
            </td>
        </tr>
        <tr>
            <td>
            <input id='id3' class='class' type='checkbox'>
            <label for='chk3'>
            :: before
            </label>
        </td>
        </tr>
    </tbody>
</table>

Pero el código siguiente funciona y regresa.

System.out.println("isDisplayed()"+ td_lblcollection.get(0).isDisplayed()); --> False
System.out.println("isEnabled()"+td_lblcollection.get(0).isEnabled()); --> True
System.out.println("isSelected()"+td_lblcollection.get(0).isSelected()); --> False

La casilla de verificación manual está visible y se puede seleccionar, pero IsDisplayed es falso y se lanza una excepción de elemento no visible.

Probé todos los métodos siguientes, pero todo falla. El localizador es bueno.

Locadora:

@FindBy(xpath = "//*[@id='table1']/tbody/tr")
List<WebElement> tblLookupSites;

Método 1: bucle en la tabla

for (WebElement trElement : tblLookupSites) {
    List<WebElement> td_collection = trElement.findElements(By.xpath("td"));
for (WebElement tdElement : td_collection) {
    List<WebElement> td_lblcollection =tdElement.findElements(By.xpath("label"));
    td_lblcollection.get(0).click();
}
}  

Método 2: bucle en la tabla

for (WebElement trElement : tblLookupSites) {
    List<WebElement> td_collection = trElement.findElements(By.xpath("td"));
for (WebElement tdElement : td_collection) {
    List<WebElement> td_lblcollection =tdElement.findElements(By.xpath("input"));
    td_lblcollection.get(0).click();
}
}  

Método 3: bucle en la tabla

for (WebElement trElement : tblLookupSites) {
    List<WebElement> td_collection = trElement.findElements(By.xpath("td"));
for (WebElement tdElement : td_collection) {
    List<WebElement> td_lblcollection =tdElement.findElements(By.id("id1"));
    td_lblcollection.get(0).click();
}
}  

Sugiera cómo hacer clic en esta casilla de verificación.

La interfaz de usuario se crea usando vue.js.

0
Leo 15 dic. 2016 a las 13:51

2 respuestas

La mejor respuesta

Pruebe la interfaz JavascriptExecutor para hacer clic en el elemento no visible inyectando algo de javascript de esta manera:

WebElement element = driver.findElement(By.xpath("//input[@id='id1']"));
JavascriptExecutor js =(JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);

También intente una forma alternativa si funciona- (esto está funcionando en el mismo tipo de estructura en mi proyecto) -

driver.findElement(By.xpath("//label[@for='chk1']")).click(); 
0
NarendraR 16 dic. 2016 a las 07:16

Utilice lo siguiente.

Driver.findElement (By.xpath ("// * [@ id = 'id1']")). click ();

1
Ramesh Bala 15 dic. 2016 a las 12:44