使用 Selenium 在 IE 中下载文件

fat*_*eem 4 java selenium internet-explorer autoit

好的,所以我正在尝试使用 Selenium 导出文件。我的浏览器是IE。当我单击导出按钮时,会出现一个本机 Windows 对话框。

弹出窗口的图像 在此处输入图片说明

我必须单击“保存”按钮。为此,我尝试使用AutoIT但它不起作用。

    exportbutton.click();

    Thread.sleep(2000);

    driver.switchTo().activeElement();

    AutoItX x = new AutoItX();
    x.winActivate("window name");
    x.winWaitActive("window name");

    x.controlClick("window name", "", "[CLASS:Button; INSTANCE:2]");
Run Code Online (Sandbox Code Playgroud)

这没有用。所以我决定使用 Robot 类并执行键盘点击Atl + S,因为这也将使浏览器能够保存文件。那也没有用。

   try
    {
        Robot robot = new Robot();
         robot.setAutoDelay(250);
         robot.keyPress(KeyEvent.VK_ALT);
         Thread.sleep(1000);
         robot.keyPress(KeyEvent.VK_S);
         robot.keyRelease(KeyEvent.VK_ALT);
         robot.keyRelease(KeyEvent.VK_S);
    }
    catch (AWTException e)
    {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

我想 Web 驱动程序存在一些问题,因为我尝试在之后打印一行exportbutton.click(),但也没有打印出来。

我是新手,所以我无法理解这个问题。请帮帮我。

fat*_*eem 6

因此,问题是有时在调用 click() 函数时光标会卡住。因此,作为解决方案,我使用 Robot 类移动光标并单击导出按钮,然后使用 Robot 类按 Alt+S,这是在 IE 中保存文件的键盘快捷键。

单击我使用的按钮

try
{
    Robot robot = new Robot();
    Thread.sleep(2000);
    robot.mouseMove(coordinates.getX()+100,coordinates.getY()-400); 
    Thread.sleep(2000);
    robot.mousePress( InputEvent.BUTTON1_DOWN_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
}
catch (AWTException e)
{
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

为了获得上面代码片段中的坐标,我使用了以下行

Point coordinates = driver.findElement(By.id("id")).getLocation();
System.out.println("Co-ordinates"+coordinates); 
Run Code Online (Sandbox Code Playgroud)

并按 Alt+SI 使用以下代码

try
{
     Robot robot = new Robot();
     robot.setAutoDelay(250);
     robot.keyPress(KeyEvent.VK_ALT);
     Thread.sleep(1000);
     robot.keyPress(KeyEvent.VK_S);
     robot.keyRelease(KeyEvent.VK_ALT);
     robot.keyRelease(KeyEvent.VK_S);
}
catch (AWTException e)
{
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)