2012-09-11 6 views
15

Sto tentando di automatizzare la funzionalità del file di caricamento in Google Drive.Selenium Webdriver - fare clic sugli elementi nascosti

L'elemento utilizzato per passare i parametri è nascosto con altezza - 0px.

Nessuna delle azioni utente renderebbe questo elemento visibile. Quindi ho bisogno di un aggiramento per fare clic sull'elemento mentre non è visibile.

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

XPath per l'elemento sopra è -

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

Sto usando

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

Eccezione -

org.openqa.selenium.ElementNotVisibleException 
  • Eleme nt non è attualmente visibile e quindi non può essere interagito con.

Ho provato a utilizzare JavascriptExecutor. Ma non riesco a trovare la sintassi esatta.

+0

Date un'occhiata al codice HTML, è Google Drive solo una forma? Se è così, non usare Selenium, basta scrivere uno script per pubblicare un modulo con i dati specificati. – jasop

risposta

18

Prova questo:

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); 

È possibile che questo gruppo avrebbe cambiato la visibilità del tuo controllo di input file. È quindi possibile procedere con i soliti passaggi per caricare il file come:

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

essere consapevoli, modificando la visibilità di un campo di input si sta immischiarsi con l'applicazione in prova. Injecting script per modificare il comportamento è invadente e non raccomandato nei test.

+0

Funziona perfettamente !! – praneel

2

Prova questo codice di esempio:

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); 

Utilizzando java script esecutore e rendere l'elemento visibile quindi fare clic sull'elemento tramite ID. Spero che hepls ..

0

Prova questa:

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); 

Qui ho sostituito XPath selettore CSS. Fammi sapere se lo script di cui sopra funziona o meno.

0

Si può dare la seguente una prova:

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

soluzione semplice va qui,

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