2012-09-11 115 views
15

Estoy tratando de automatizar la función de cargar archivos en Google Drive.Selenium Webdriver - haga clic en elementos ocultos

El elemento utilizado para pasar los parámetros se oculta con la altura - 0px.

Ninguna de las acciones del usuario haría visible este elemento. Así que necesito un trabajo para hacer clic en el elemento mientras no esté visible.

<input type="file" style="height: 0px; visibility: hidden; position: absolute; width: 340px; font-size: inherit;" multiple=""/> 

El XPath para el elemento anterior es -

//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input 

estoy usando

WebDriver.findElement(By.xpath(<xpath>).sendKeys(<uploadFile>) 

Excepción -

org.openqa.selenium.ElementNotVisibleException 
  • Eleme nt no está visible actualmente y por lo tanto no se puede interactuar con.

He intentado con JavascriptExecutor. Pero no puede encontrar la sintaxis exacta.

+0

Tome una mirada en el HTML, Google Drive es sólo una forma? Si es así, no use Selenium, solo escriba una secuencia de comandos para publicar un formulario con los datos que especifique. – jasop

Respuesta

18

Prueba esto:

WebElement elem = yourWebDriverInstance.findElement(By.xpath("//*[@class='goog-menu goog-menu-vertical uploadmenu density-tiny']/input")); 
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';"; 

((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem); 

El grupo anterior podría cambiar la visibilidad de su control de entrada de archivo. A continuación, puede proceder con los pasos habituales para subir archivos como:

elem.sendKeys("<LOCAL FILE PATH>"); 

Tenga en cuenta, al cambiar la visibilidad de un campo de entrada se está entrometiendo con la aplicación que se está probando. Inyectar scripts para alterar el comportamiento es intrusivo y no se recomienda en las pruebas.

+0

¡Funciona perfectamente bien! – praneel

2

probar este código de ejemplo:

JavascriptExecutor executor= (JavascriptExecutor)driver; 
executor.executeScript("document.getElementById('ID').style.display='block';"); 
Select select = new Select(driver.findElement(By.id("ID"))); 
select.selectByVisibleText("value"); 
Thread.sleep(6000); 

Mediante el uso de ejecutor java script y hacer que el elemento visible continuación, haga clic en el elemento a través del ID. Espero que hepls ..

0

Prueba esto:

WebElement elem = yourWebDriverInstance.findElement(
    By.cssSelector(".uploadmenu > input")); 
String js = 
    "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';"; 
((JavascriptExecutor) yourWebDriverInstance).executeScript(js, elem); 

Aquí he sustituido por XPath selector CSS. Avísame si el scripting anterior está funcionando o no.

0

Se puede dar el siguiente intentarlo:

((JavascriptExecutor)driver).executeScript("$('.goog-menu.uploadmenu > input').click();"); 
6

solución simple va aquí,

WebElement tmpElement= driver.finElement(ElementLocator); 
JavascriptExecutor executor = JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", tmpElement); 
Cuestiones relacionadas