2012-09-11 206 views
15

我试图在Google云端硬盘中自动上传文件功能。Selenium Webdriver - 点击隐藏元素

用于传递参数的元件被隐藏随高度 - 0像素。

无用户操作将使这个元素可见。所以我需要一个解决方法来点击元素,而不可见。

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

用于上述元件中的XPath是 -

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

我使用

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

异常 -

org.openqa.selenium.ElementNotVisibleException 
  • Eleme nt当前不可见,因此可能不会与之交互。

我一直在使用JavascriptExecutor尝试。但无法找到确切的语法。

+0

看看的HTML,是谷歌驱动器只是一种形式?如果是这样,请不要使用Selenium,只需编写一个脚本来发布包含您指定数据的表单。 – jasop

回答

18

试试这个:

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

上面一堆会改变你的文件输入控件的可见性。然后,您可以用文件通常的步骤进行上传,如:

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

注意,通过改变你与测试的应用程序干预的输入字段的可见性。注入脚本来改变行为是侵入性的,不建议在测试中使用。

+0

完美无瑕! – praneel

2

试试这个示例代码:

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

,通过使用Java脚本执行,使元素可见然后单击元素通过ID。希望它hepls ..

0

试试这个:

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

在这里,我通过CSS选择器取代的XPath。让我知道上面的脚本是否正在工作。

0

你可以给以下尝试:

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

简单的解决方案放在这里,

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