2012-09-11 22 views
15

Ich versuche, Upload-Dateifunktionalität in Google Drive zu automatisieren.Selenium Webdriver - klicken Sie auf verdeckte Elemente

Das Element zum Übergeben von Parametern ist mit Höhe - 0px versteckt.

Keine der Benutzeraktionen würde dieses Element sichtbar machen. Also brauche ich eine Arbeit, um auf das Element zu klicken, während es nicht sichtbar ist.

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

XPath für das obige Element ist -

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

I

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

Ausnahme -

org.openqa.selenium.ElementNotVisibleException 
  • Eleme nt ist derzeit nicht sichtbar und kann daher nicht interagiert werden.

Ich habe versucht mit JavascriptExecutor. Aber nicht in der Lage, die genaue Syntax zu finden.

+0

Werfen Sie einen Blick auf HTML, ist Google Drive nur eine Form? Verwenden Sie Selenium nicht, schreiben Sie einfach ein Skript, um ein Formular mit den von Ihnen angegebenen Daten zu senden. – jasop

Antwort

18

Versuchen Sie folgendes:

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

Die obige Bund würde die Sichtbarkeit Ihrer Datei Eingabesteuerung ändern. Sie können dann mit den üblichen Schritten zur Datei gehen Sie laden wie:

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

bewusst werden, indem die Sichtbarkeit eines Eingabefeldes ändern Sie mit der zu testenden Anwendung werden einzumischen. Das Injizieren von Skripts zur Änderung des Verhaltens ist aufdringlich und wird in Tests nicht empfohlen.

+0

Funktioniert einwandfrei !! – praneel

2

diesen Beispielcode Versuchen:

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

von Java-Script Executor verwenden und das Element sichtbar dann auf das Element durch ID klicken machen. Hoffe, es hepls ..

0

Try this:

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

Hier habe ich XPath von CSS-Selektor ersetzt. Lassen Sie mich wissen, ob das obige Scripting funktioniert oder nicht.

0

Sie können die folgenden zu versuchen:

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

Einfache Lösung hier geht,

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