我正在尝试使用Selenium上传文件,但我的输入文件元素已隐藏。
我隐藏的HTML是:
<input id="yui_3_9_0pr3_1_1361897421363_2239" type="file" style="visibility:hidden; width:0px; height: 0px;" multiple="" accept="">
并且选择文件按钮HTML为:
<button id="yui_3_9_0pr3_1_1361897421363_2242" class="yui3-button" tabindex="0" aria-label="Select Files" role="button" type="button" style="width: 100%; height: 100%;">Select Files</button>
我使用您建议的JavascriptExecutor
尝试了相同的操作,但它仍然提供了异常ElementNotVisible: Element is not currently visible
。
这是我的代码:
WebElement fileInput = driver.findElement(By.xpath(//@input[@type='file']));
System.out.println("h14");
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) driver).executeScript(js, fileInput);
System.out.println("h15");
LocalFileDetector detector = new LocalFileDetector();
String path = "//Users//pdua//Desktop//images.jpeg";
// File f = detector.getLocalFile(path);
//((RemoteWebElement)fileInput).setFileDetector(detector);
System.out.println("h16");
//fileInput.sendKeys(f.getAbsolutePath());
fileInput.sendKeys(path);
隐藏输入文件元素的XPath是//input[@type='file']
。不确定这是否正确!
答案 0 :(得分:1)
如果元素不可见和/或不显示,则硒不会与元素交互。这可能是由于各种设置引起的:
visibility=hidden
; display=none
; height=0
或width=0
; 在您的代码中,您显示height
和width
等于0,但仅重置height
。尝试跟随JS:
String js = "arguments[0].style.height='1'; arguments[0].style.width='1'; "
+ "arguments[0].style.visibility='visible';";
此外,请在浏览器中检查input[@type='file']
元素,以检查是否应用了其他任何可影响可见性的样式或类。在我的情况下,有一个类应用于button
包装input[@type='file']
元素并设置display=none;
。
注意::更改元素可见性时,该测试正在修改该测试下的应用程序。不建议在测试中使用这种侵入性行为。
更新:它显示在屏幕外部的元素(例如left=-1200
)被报告未显示在Selenium中,但它不会阻止Selenium在其上执行sendKeys()
方法。该方法没有返回类型,在这种情况下不会出现异常。