Selenium Webdriver - 点击隐藏元素
Posted
技术标签:
【中文标题】Selenium Webdriver - 点击隐藏元素【英文标题】:Selenium Webdriver - click on hidden elements 【发布时间】:2012-09-03 23:45:02 【问题描述】:我正在尝试在 Google Drive 中自动上传文件功能。
用于传递参数的元素被隐藏,高度为0px。
任何用户操作都不会使该元素可见。因此,我需要解决方法以在元素不可见时单击它。
<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
元素当前不可见,因此可能无法与之交互。
我尝试过使用 javascriptExecutor。但是找不到确切的语法。
【问题讨论】:
看一下 html,Google Drive 只是一个表单吗?如果是这样,请不要使用 Selenium,只需编写一个脚本来发布包含您指定数据的表单。 【参考方案1】:试试这个:
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>");
请注意,通过更改输入字段的可见性,您正在干预被测应用程序。注入脚本来改变行为是侵入性的,不建议在测试中使用。
【讨论】:
这对 Appium android 平台中可用的隐藏元素也有效吗?【参考方案2】:简单的解决方案:
WebElement tmpElement = driver.finElement(ElementLocator);
JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("arguments[0].click();", tmpElement);
【讨论】:
【参考方案3】:试试这个示例代码:
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单击元素。希望对你有帮助。。
【讨论】:
为什么需要线程休眠? executeScript 应该是同步的【参考方案4】:您可以尝试以下方法:
((JavascriptExecutor)driver).executeScript("$('.goog-menu.uploadmenu > input').click();");
【讨论】:
【参考方案5】:试试这个:
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。让我知道上述脚本是否有效。
【讨论】:
以上是关于Selenium Webdriver - 点击隐藏元素的主要内容,如果未能解决你的问题,请参考以下文章
如何隐藏 Firefox 窗口(Selenium WebDriver)?
如何单击使用 Selenium WebDriver 隐藏的元素?