Java 如何在没有';输入';要素

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&nbsp;<i class="fa fa-upload"></i></button> 上传 我尝试

我有一个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&nbsp;<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);