问题描述
我正在为 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);