我是一个JavaScript / Java开发人员,我一直在试图从文件系统中找出如何硒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();
因此,他们正在设置发送键,值吗? 我不明白这一点。 我期待通过源代码在这里找到: http://code.google.com/p/selenium/source/checkout我仍然无法找到他们这样做在那里。
编辑:我的问题不在于如何与硒做到这一点,但并硒开发商如何实现这一点? 他们是如何避开JavaScript中的安全限制? 他们如何上传文件?
有趣的问题哥们......他们已经写了一个HTTP代理服务器来解决的Javascript secuirty限制。 使用该代理使人们有可能侧步很多“同主持人出身”的政策,其中浏览器将不会允许JavaScript做比从当前页面已送达的服务器之外的其它电话的制约。
而且采用的webdriver在操作系统级别触发事件的另一种方法。 由于这些“原生事件”不是由浏览器产生的这种方法绕过放在合成事件和,因为他们是操作系统特定的,一旦他们在特定平台上重用的代码在另一个浏览器工作了一个浏览器是比较安全限制简单。
大部分的含量高于从引用的below..do阅读硒内部的详细信息如下参考
http://www.aosabook.org/en/selenium.html
上传文件WINDOWNS功能HTML代码如下:
<input id="fileField" type="file" onchange="document.getElementById('textfield').value=this.value" name="position">
<input type="submit" value="导入">
您可以使用下面的代码来完成上传Windows文件。 它的工作原理成功地与代码不包括点击上传操作。
driver.FileDetector = new LocalFileDetector();
FindElement(By.Id("fileField")).SendKeys(@"C:\Users\admin\Desktop\ProfessionCodes.txt"); FindElement(By.CssSelector("input[type='submit']")).Click();
我已经上传到Facebook的照片使用硒的webdriver和AutoIt的
操作步骤如下
步骤1
基于Eclipse代码高达(上传照片)是如下:
WebElement Upload = Firefox.findElement(By.cssSelector("input[id^='u_']"));
Upload.click();
第2步
下载并安装的AutoIt: http://www.autoitscript.com/site/autoit/downloads/ (下载ZIP)
第3步
编写代码如下在记事本并将其保存为PhotoUpload.au3
WinWaitActive("File Upload")
Send("D:\Photo0116.jpg")
Send("{ENTER}")
第4步 :右键单击此.au3文件和编译。
第5步 :在下面的脚本文件添加代码:
try {
String[] commands = new String[]{};
// Location of the autoit executable
commands = new String[] {"D:\\My softwares\\install software\\selenium\\UploadPhoto3.exe"};
Runtime.getRuntime().exec(commands);
}
catch (IOException e) {}
步骤6:运行脚本( PhotoUpload.java
)
第7步 :照片获得成功上传。
//assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");
要么
driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg");
试试这个,让我知道
在某些情况下,特别是与Java中,你需要创建一个文件对象,并通过absolutePath()的驱动程序,如下所示:
File file = new File(sampleFile);
driver.findElement(By.id("<Your input tag with type of File>")).sendKeys(file.getAbsolutePath());
示例文件是指向需要上传文件的字符串。 这在Firefox和Chrome为我工作。
这帮助我做文件上传,
代码:
public class FileUpload {
@Test
public void test() {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.freepdfconvert.com/pdf-word");
driver.findElement(By.id("clientUpload")).click();
driver.switchTo()
.activeElement()
.sendKeys(
"/home/likewise-open/GLOBAL/123/Documents/filename.txt");
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
driver.findElement(By.id("convertButton"));
/*
* driver.switchTo().activeElement()
* .sendKeys("selenium_2_testing_tools.pdf"); ;
*/
{
driver.wait(30000);
} catch (Exception er) {
System.out.println(er);
}
}
}