在 Selenium 2 中与 PDF 弹出窗口交互
我正在尝试测试一个页面,单击按钮会生成 PDF 形式的弹出窗口。 我希望 selenium 单击弹出窗口并截取屏幕截图或保存 PDF。
我使用以下代码获取所有窗口句柄以使用 switchTo() 命令,但当我执行它时,它只返回一个窗口。 Selenium 似乎无法识别 PDF 弹出窗口。
Set<String> handles = driver.getWindowHandles();
//converts set to array
String[] array = handles.toArray(new String[0]);
System.out.println(Arrays.asList(array));
还有其他方法可以切换到 PDF 弹出窗口吗?
I'm trying to test a page where clicking a button generates a popup that's in PDF form.
I'd like selenium to click on the popup and either take a screenshot of the screen or save the PDF.
I use the following code to get all the window handles to use the switchTo()
command, but when I execute it it only returns a single window. Selenium doesn't seem to recognize the PDF popup.
Set<String> handles = driver.getWindowHandles();
//converts set to array
String[] array = handles.toArray(new String[0]);
System.out.println(Arrays.asList(array));
Is there another way to switchTo the PDF popup?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为 Selenium 只能控制 DOM 可以控制的东西(IDE 只是运行 JavaScript),所以你不能截屏。你唯一的选择就是保存它,除非新的 HTML5 的 JavaScript 强大到可以在操作系统上启动东西(我不知道)。我会让您找到使用 JavaScript 在 Google 上保存 PDF 的代码,但这些信息应该可以帮助您入门。只需创建一个名为 Selenium.prototype.doLaunchAndSavePDF 之类的自定义命令即可启动 PDF 并保存它。并将“目标”参数设置为文件的路径和名称。我不确定 Selenium 如何将前(或后)斜杠传递给 JavaScript,所以要小心。祝你好运!
选项 #1 - 如果使用 Selenium IDE:
在 Selenium IDE > 下指定 user-extensions.js 文件选项(菜单)>选项(菜单选项)>常规选项卡,然后浏览到“Selenium Core Extensions”下的文件。
选项 #2 - 如果使用 Selenium RC 服务器:
如果您不使用 IDE 而是将 Selenium RC 服务器与客户端驱动程序(例如 JUnit)一起使用,则必须指定 *.当您在命令行上启动 Selenium RC 服务器时,您可以使用 -userExtensions 参数创建 .js 文件。但你说你只想使用 IDE,所以我会忽略这一点。使用 Selenium RC 服务器需要进行大量其他设置。
java -jar selenium-server.jar -userExtensions user-extensions.js
=========================
我在我的自定义 user-extensions.js 文件。我必须退出并重新启动 IDE 才能找到它。在 IDE 的“命令”字段中键入“do”后的所有内容以查找自定义命令。看起来它还在 IDE 中添加了“customAlertAndWait”。
user-extensions.js 文件中的代码:
Selenium.prototype.doCustomAlert = function(sTarget, sValue) {alert('Target: ' + sTarget + ' ... Value: ' + sValue); };
Selenium IDE 命令详细信息:
命令:customAlert
目标:自定义警报目标
值:自定义警报值
Because Selenium can only control things that the DOM can control (the IDE is just running JavaScript) you cannot take a screen shot. Your only option is to save it, unless JavaScript for the new HTML5 is that powerful to launch things on the Operating System (I don't know). I will let you find the code to save a PDF on Google using JavaScript, but this information should get you started. Just create a custom command, called Selenium.prototype.doLaunchAndSavePDF or something, to launch your PDF and save it. And have your "target" parameter be the path and name of the file. I'm not sure how Selenium passes the forward (or backward) slashes to JavaScript, so be careful of that. Good luck!
Option #1 - if using Selenium IDE:
Specify the user-extensions.js file under Selenium IDE > Options (menu) > Options (menu option) > General Tab, then browse to your file under "Selenium Core Extensions".
Option #2 - if using Selenium RC Server:
If you're not using the IDE and using Selenium RC server with a client driver (like JUnit for example), you must specify the path of the *.js file with the -userExtensions parameter when you start the Selenium RC Server on the command line. But you said you just wanted to use the IDE, so I'd ignore this. It takes quite a bit of other setup to use the Selenium RC server.
java -jar selenium-server.jar -userExtensions user-extensions.js
=======================
I made the following custom command (JavaScript function) in my custom user-extensions.js file.. I had to exit and restart the IDE before it found it. Type everything after the "do" in the "Command" field in the IDE to find the custom command. It looks like it also added a "customAlertAndWait" to the IDE as well.
Code in user-extensions.js file:
Selenium.prototype.doCustomAlert = function(sTarget, sValue) { alert('Target: ' + sTarget + ' ... Value: ' + sValue); };
Selenium IDE command details:
Command: customAlert
Target: custom alert target
Value: custom alert value