selenium - selenium webdriver 如何上传文件到浏览器?

标签 selenium automation webdriver browser-automation selenium-chromedriver

我是一名 javascript/java 开发人员,我一直在尝试弄清楚 selenium webdriver 自动化框架如何从文件系统上传文件。不可能通过 JavaScript 设置文件输入,因为这是一种安全违规。但不知何故,webdriver 可以使用以下命令来完成此操作:

driver.setFileDetector(new LocalFileDetector());
WebElement upload = driver.findElement(By.id("myfile"));
upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg");
driver.findElement(By.id("submit")).click();

所以他们是通过向其发送 key 来设置值的?我不明白。我查看了这里找到的源代码: http://code.google.com/p/selenium/source/checkout 我仍然无法找到他们在哪里执行此操作。

编辑:我的问题不是如何使用 Selenium 来做到这一点,而是 Selenium 开发人员是如何使这成为可能的?他们是如何绕过 javascript 的安全限制的?他们如何上传文件?

最佳答案

问得好,伙计...他们编写了一个 HTTP 代理来解决 Javascript 安全限制。使用此代理可以绕过“同一主机源”策略的许多限制,即浏览器不允许 Javascript 调用除提供当前页面的服务器之外的任何内容。

此外,WebDriver 使用在操作系统级别触发事件的替代方法。由于这些“ native 事件”不是由浏览器生成的,因此这种方法规避了对合成事件施加的安全限制,并且由于它们是特定于操作系统的,一旦它们在特定平台上的一个浏览器上工作,则在另一浏览器中重用代码相对来说是相对容易的。简单。

上面的大部分内容都是从下面引用的。请阅读以下引用资料以获取有关 Selenium 内部结构的更多详细信息

http://www.aosabook.org/en/selenium.html

关于selenium - selenium webdriver 如何上传文件到浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963738/

相关文章:

c# - 使用 Firebug 和 Selenium 自动进行页面加载性能测试

java - moveToElement(元素,xoffset,yoffset)在 selenium webdriver 2.32.0 中不起作用

javascript - 通过WebView进行Android Headless浏览?

CSS/ Selenium : visiblity of an element does not change

node.js - 为什么 Mocha 说我的测试通过了,而它不应该通过?

automation - Ansible 字典键作为变量

powershell - 计划 Powershell 更改 ObjectType

java - 无法将键发送到 div 元素 Selenium - Java

java - 如何以及何时实现 Selenium WebDriver 的刷新(ExpectedCondition<T> 条件)?

java - 如何查看Word标题中的空间量?