不确定如何使用sendkeys上传文件。有人提供某种示例脚本,可以在此网址上传图片" http://elance.wetwaresoft.com/account/register"
所以我可以参考。
答案 0 :(得分:1)
您应该使用SendKeys()
来完成此任务。我提供了一个示例代码块供您查看如何完成。
By byCss = By.CssSelector("[id='ProfilePic'][type='file']");
String filePath = "my\\file\\with.extension";
IWebElement element = new WebDriverWait(_driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists(byCss));
element.SendKeys(filePath);
注意:使用C#编写,如果使用Java
答案 1 :(得分:0)
Selenium不会控制基于窗口的元素。所以,为了处理这个文件上传方案,我建议去AutoIT。它是Windows操作系统的关键模拟器。
如果您不熟悉AutoIT,请使用此链接进行基本了解。
AutoIT下载链接: - https://www.autoitscript.com/site/autoit/downloads/
AutoIT教程链接: - https://www.autoitscript.com/autoit3/docs/tutorials/notepad/notepad.htm
行。现在假设你知道AutoIT是如何工作的,按照下面提到的步骤为文件uplaod创建autoIT文件,它将在Windows操作系统上使用firefox浏览器上传图像。
1)在AutoIT编辑器中使用以下脚本并将文件保存在名称" ImageUpload.au3 "并将其保存在项目根文件夹中。
WinWait(" [标题:文件上传]","",130)
WinActivate(" [标题:文件上传]")
睡眠(2000)
$ deskpath =" E:\ image.jpg"
发送($ deskpath);
睡眠(2000)
发送(" {TAB}&#34)
发送(" {TAB}&#34)
睡眠(2000)
发送(" {ENTER}&#34)
2)编译脚本(工具>编译),它将生成" ImageUpload.exe "档案给你。
3)现在我们必须在单击File upload按钮后调用并执行autoIT文件。该代码看起来与下面提到的类似。
/ *你的JAVA代码在这里* /
//这将点击选择图像按钮
driver.findelement(By.id(" ProfilePic&#34))点击();
//将您的自动文件放在项目文件夹
中 。调用Runtime.getRuntime()EXEC(" \ ImageUpload.exe&#34);
4)那就是:)让我知道是否需要任何进一步的帮助。
(如果这个答案有帮助,请不要忘记投票)
答案 2 :(得分:0)
您可以通过selenium执行此第一次单击上载按钮,然后调用下面提到的函数并将其传递给字符串中的绝对路径
public void uplaodFile(String path) throws AWTException, InterruptedException
{
Thread.sleep(5000);
Robot rb=new Robot();
//Get file path
StringSelection stringSelection = new StringSelection(path);
//Copy Path on Clipboard
Toolkit.getDefaultToolkit().getSystemClipboard()
.setContents(stringSelection, null);
//Paste Clipboard Data
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
}
请确保这些进口
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;