在浩瀚的 Stack Overflow 中浏览时,出现了许多有关使用 Selenium WebDriver 进行文件上传的问题。然而,许多解决方案都未能解决令无数用户困惑的特定场景。
考虑以下情况:
我偶然发现了一个答案,建议使用 sendKeys 来指定文件路径,如图所示下面:
<code class="java">WebElement fileInput = driver.findElement(By.name("uploadfile")); fileInput.sendKeys("C:/path/to/file.jpg");</code>
但是,这种方法不会激活窗口句柄,从而无法进行进一步的交互。
Zamzar 和 Uploadify:不同的方法
对于像 Zamzar 这样的网站,上述解决方案可以无缝运行。只需在指定的输入字段中输入文件路径,上传过程就会按预期进行。
相比之下,Uploadify 提出了更艰巨的挑战。文件上传组件是一个 Flash 对象,没有与 WebDriver 兼容的 API。这意味着您无法直接控制随后打开的文件选择窗口。
求助于机器人类进行盲输入
鉴于光标通常位于单击Flash元素后的文件名输入字段,您可以使用Robot类采取“盲”输入策略。这需要模拟击键来输入文件路径,如下所示:
<code class="java">driver.findElement(By.id("SWFUpload_0")).click(); Robot r = new Robot(); r.keyPress(KeyEvent.VK_C); // C r.keyRelease(KeyEvent.VK_C); r.keyPress(KeyEvent.VK_COLON); // : (colon) r.keyRelease(KeyEvent.VK_COLON); r.keyPress(KeyEvent.VK_SLASH); // / (slash) r.keyRelease(KeyEvent.VK_SLASH); // etc. for the whole file path r.keyPress(KeyEvent.VK_ENTER); // confirm by pressing Enter in the end r.keyRelease(KeyEvent.VK_ENTER);</code>
Flash 的非正统方法
作为最后的手段,您可以考虑非常规技术修改Flash应用程序的源代码。通过通过ExternalInterface公开内部方法并利用来自WebDriver的JavaScript调用,您可以间接与Flash应用程序交互。然而,这种方法需要技术专业知识,并且可能并不适用于所有场景。
以上是如何处理 Selenium WebDriver 中的文件上传困境:为什么 sendKeys 失败以及该怎么办?的详细内容。更多信息请关注PHP中文网其他相关文章!