使用Selenium WebDriver自动执行IE11 / Edge文件下载


问题(按下按钮)

使用IE11 / Edge下载文件时,响应对话框(通知栏)将显示在底部,您需要按"保存"。

此对话框。
image.png
image.png

这次,我研究了如何使用Selenium WebDriver对此进行测试。实现语言将是Java。

按下按钮的代码

似乎该对话框无法在浏览器设置中隐藏,因此我研究了如何按"保存"。

我通过参考通过Selenium在IE9中测试下载文件的代码创建了它,但是由于IE版本不同,我不得不对其进行一些修改。

sample.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.awt.AWTException;
import java.awt.Robot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;

//???

// ダウンロード処理を行うエレメント(ボタンなど)を検索
WebElement downloadElement = driver.findElement(By.id("download"));

try {
    Robot robot = new Robot();

    // 対象エレメントにフォーカスを移動
    downloadElement.sendKeys("""");

    // Enterキーを押下
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);

    // ダウンロードの通知バー(ダウンロードマネージャ)が出てくるのを待つ
    Thread.sleep(2000);

    // Alt+N を押下して、ダウンロードの通知バー(ダウンロードマネージャ)にフォーカスを移動
    robot.keyPress(KeyEvent.VK_ALT);
    robot.keyPress(KeyEvent.VK_N);
    robot.keyRelease(KeyEvent.VK_N);
    robot.keyRelease(KeyEvent.VK_ALT);

    // Enterキーを押下してダウンロード開始  
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);

    // ダウンロード終了を待つ
    Thread.sleep(2000);

    // Alt+N を押下して、ダウンロードの通知バー(ダウンロードマネージャ)にフォーカスを移動
    robot.keyPress(KeyEvent.VK_ALT);
    robot.keyPress(KeyEvent.VK_N);
    robot.keyRelease(KeyEvent.VK_N);        
    robot.keyRelease(KeyEvent.VK_ALT);

    // タブキーを3回押下して、通知バーの "X" ボタンに遷移する
    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_TAB);

    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_TAB);

    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_TAB);

    // Enterキーを押下して、通知バー(ダウンロードマネージャ)を閉じる
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER);
} catch (AWTException e) {
    e.printStackTrace();
}

解释和注意事项

正如我在

注释中所写,此代码使用Robot来执行下载所需的击键。具体地

  • 按Alt N(关注下载对话框)→按Enter(按保存按钮)→再按Alt N(下载后关注确认对话框)→移至选项卡上的X(关闭)按钮→按Enter(对话框关闭)

我们正在执行名为

的操作。

因此,如果在执行测试期间更改活动窗口,则将在该窗口中操作键,并且测试将失败(例如,正常)。下载文件夹以检查它是否可以执行,该密钥将在此处操作)。在此处测试代码时,请注意不要切换活动窗口。

另外,如果将来浏览器的规格发生变化并且按键操作发生变化,则需要对其进行更正。
最后,我将列出这次确认的浏览器版本。

IE11版本信息:
image.png

边缘版本:
image.png