1

我正在尝试使用 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']. 不知道对不对!

4

1 回答 1

1

如果元素不可见和/或显示,Selenium 将不会与元素交互。这可能是由多种设置引起的:

  • visibility=hidden;
  • display=none;
  • height=0width=0
  • 可显示坐标之外的位置(例如 left=-1)

在您的代码中,您显示heightandwidth等于 0,但仅 reset 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()方法。该方法没有返回类型,并且在这种情况下不会通过异常。

于 2018-08-01T23:01:56.883 回答