Java 如何在没有';输入';要素
我有一个HTML页面,上面有一个名为“上传”的按钮,id:Java 如何在没有';输入';要素,java,selenium,testing,selenium-webdriver,automation,Java,Selenium,Testing,Selenium Webdriver,Automation,我有一个HTML页面,上面有一个名为“上传”的按钮,id:btn导入问题。要素: <button class="btn btn-success btn-sm col-lg-11" id="btn-import-questions" data-ts-file-selector="questions-import-init"> Upload <i class="fa fa-upload"></i></button> 上传 我尝试
btn导入问题
。要素:
<button class="btn btn-success btn-sm col-lg-11" id="btn-import-questions" data-ts-file-selector="questions-import-init"> Upload <i class="fa fa-upload"></i></button>
上传
我尝试了如下Selenium Java代码:
driver.findElement(By.id(“btn导入问题”)).sendkeys(“C:/path/to/file.xlsx”)代码>
但是,由于这是一个上载按钮,而不是输入类型元素,因此上述代码不起作用。您的操作几乎正确,只是应该使用type=“file”
对输入调用sendKeys()
,这在您的情况下很可能是不可见的。如果是这种情况,请首先使图元可见:
检查DOM,因为某个地方必须有一个
。网站的javascript将调用此元素的.click()以弹出文件选择器对话框,并通过选择关闭对话框将提供路径。使用Selenium,可以通过.sendkeys()实现相同的功能:
您可以使用AutoIT工具执行此操作。
使用AutoIT.Au3文件中的以下代码进行上传
sleep(1000)
If WinExists("[TITLE:Open]") Then
Local $hWnd = WinWaitActive ("[TITLE:Open]", "",15)
WinActivate($hWnd)
;WinWaitActive("Open", "", 10)
ControlFocus("Open","","Edit1")
ControlsetText("Open","","Edit1",$CmdLine[1])
ControlClick("Open","","Button1")
ElseIf WinExists("[TITLE:File Upload]") Then
Local $hWnd = WinWaitActive ("[TITLE:File Upload]", "",15)
WinActivate($hWnd)
;WinWaitActive("Open", "", 10)
ControlFocus("File Upload","","Edit1")
ControlsetText("File Upload","","Edit1",$CmdLine[1])
ControlClick("File Upload","","Button1")
Else
Local $hWnd = WinWaitActive ("[TITLE:Choose File to Upload]", "",15)
WinActivate($hWnd)
;WinWaitActive("Open", "", 10)
ControlFocus("Choose File to Upload","","Edit1")
ControlsetText("Choose File to Upload","","Edit1",$CmdLine[1])
ControlClick("Choose File to Upload","","Button1")
EndIf
然后在C代码中使用下面的代码来调用它
String sExe=(<EXE file path>+" "+<Upload file path>);
Runtime.getRuntime().exec(sExe);
Thread.sleep(5000);
String sExe=(+“”+);
Runtime.getRuntime().exec(sExe);
睡眠(5000);
这一款适合我:
String CSVFile = "C:\\D\\Projects\\file.csv";
WebElement fileElement=this.driver.findElement(By.xpath("//[text()='fileElement']"));
this.wait.until(ExpectedConditions.elementToBeClickable(fileElement ));
fileElement .click();
StringSelection ss = new StringSelection(CSVFile);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
当您手动单击此按钮时会发生什么情况?窗口弹出窗口将立即出现,并使用“打开”和“取消”按钮询问文件路径。当您使用此弹出窗口选择文件时,在弹出窗口消失后,该文件的名称是否会出现在页面的某个位置?提供文件路径并单击“打开”后,突然弹出窗口消失,文件中的数据被导入我的应用程序。您的窗口是否显示上载的文件路径。。??一旦直接在网站上查看它。
String CSVFile = "C:\\D\\Projects\\file.csv";
WebElement fileElement=this.driver.findElement(By.xpath("//[text()='fileElement']"));
this.wait.until(ExpectedConditions.elementToBeClickable(fileElement ));
fileElement .click();
StringSelection ss = new StringSelection(CSVFile);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
//native key strokes for CTRL, V and ENTER keys
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);