首页 > Java > java教程 > 如何处理 Selenium WebDriver 中的文件上传困境:为什么 sendKeys 失败以及该怎么办?

如何处理 Selenium WebDriver 中的文件上传困境:为什么 sendKeys 失败以及该怎么办?

Barbara Streisand
发布: 2024-10-31 10:34:42
原创
562 人浏览过

How to Handle File Upload Dilemmas in Selenium WebDriver: Why sendKeys Fails and What to Do Instead?

Selenium WebDriver 中的文件上传困境

在浩瀚的 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板