使用 selenium 在 microsoft edge 中自动保存文件

问题描述

我正在为 microsoft edge 使用 selenium webdriver(4.0.0) 的测试版。我不知道如何将数据保存为打印窗口中的 pdf,该窗口在我单击主窗口中的按钮后打开

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <button @click="callChildMethod()">click to call addToNum method in child component from parent</button>
  <child ref="child"></child>
  <div>

解决方法

由于点击打印按钮时打开的窗口是一个os对话框,因此不能直接从selenium访问。我解决问题的方法是使用 P/Invoke。 使用 Visual Studio 的 spy++ 工具可以轻松找到窗口句柄及其标题。

接下来我定义了方法

[DllImport("user32.dll",EntryPoint = "FindWindow",SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly,string lpWindowName);

并称之为,

       var saveHandle = FindWindowByCaption(IntPtr.Zero,"Save Print Output As");

下一步是使用手柄将窗口置于前台。为此,我使用了方法

[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

最后一步是模拟键盘和鼠标操作。为此,我使用了库 InputSimulator。可以使用nuget包管理器下载

                var ins = new InputSimulator();
                ins.Keyboard.TextEntry($"ebrc{irandom.NextDouble()}");
                Thread.Sleep(2000);
                ins.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.TAB);
                ins.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.TAB);
                ins.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.RETURN);