微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。