Testing 与Selenium中的PDF弹出窗口交互

Testing 与Selenium中的PDF弹出窗口交互,testing,pdf,selenium,qa,selenium-webdriver,Testing,Pdf,Selenium,Qa,Selenium Webdriver,我试图测试一个页面,点击按钮会生成一个PDF格式的弹出窗口。 我希望selenium单击弹出窗口,然后拍摄屏幕截图或保存pdf 我使用以下代码获取所有窗口句柄,以使用switchTo()命令,但当我执行它时,它只返回一个窗口。Selenium似乎无法识别pdf弹出窗口 Set<String> handles = driver.getWindowHandles(); //converts set to array String[] array = handles.toArray(new

我试图测试一个页面,点击按钮会生成一个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));
Set handles=driver.getWindowHandles();
//将集合转换为数组
String[]数组=handles.toArray(新字符串[0]);
System.out.println(Arrays.asList(array));

有没有其他方法可以切换到pdf弹出窗口?

因为Selenium只能控制DOM可以控制的东西(IDE只是运行JavaScript),所以您无法截屏。你唯一的选择就是保存它,除非新HTML5的JavaScript功能强大到可以在操作系统上启动东西(我不知道)。我将让您找到使用JavaScript在Google上保存PDF的代码,但是这些信息应该可以帮助您开始。只需创建一个自定义命令,名为Selenium.prototype.doLaunchAndSavePDF或其他什么,即可启动PDF并保存它。并将“target”参数设置为文件的路径和名称。我不确定Selenium是如何将前向(或后向)斜杠传递给JavaScript的,所以要小心。祝你好运

选项#1-如果使用Selenium IDE:

在Selenium IDE>选项(菜单)>选项(菜单选项)>常规选项卡下指定user-extensions.js文件,然后浏览到“Selenium Core extensions”下的文件

选项2-如果使用Selenium RC服务器:

如果您没有使用IDE,也没有将Selenium RC server与客户端驱动程序一起使用(例如JUnit),那么在命令行上启动Selenium RC server时,必须使用-userExtensions参数指定*.js文件的路径。但是你说你只想使用IDE,所以我忽略了这一点。使用Selenium RC服务器需要相当多的其他设置

java-jar-selenium-server.jar-userExtensions-user-extensions.js

=======================

我在自定义user-extensions.js文件中执行了以下自定义命令(JavaScript函数)。。在IDE找到它之前,我必须退出并重新启动它。在IDE的“Command”字段中键入“do”之后的所有内容以查找自定义命令。看起来它还向IDE添加了一个“customAlertAndWait”

user-extensions.js文件中的代码:

Selenium.prototype.doCustomAlert=函数(sTarget,sValue){alert('Target:'+sTarget+'…Value:'+sValue);}

Selenium IDE命令详细信息:

命令:customAlert
目标:自定义警报目标

值:自定义警报值

我在下面给了您一个开始。但我没有足够的信息来100%回答你,并将我的答案标记为“答案”,除非你慷慨大方。(1) PDF是在HTTP处理程序中启动的(作为文件本身)还是(2)在对象-严格(或iFrame-过渡)标记中启动的,PDF流式传输到对象/iFrame内部启动的页面,如PDFViewer.aspx或(3),它是在自己的页面中启动的(如PDFViewer.aspx)?这将使手头任务的解决方案大不相同。你是说PDF是在Adobe应用程序中打开的,而不是在浏览器PDF插件中打开的吗?如果是这样的话,可能只是一个mime类型的调整,以使PDF在第二个浏览器窗口中打开,那么您可以使用WebDriver窗口句柄方法来跟踪窗口和屏幕截图(可能使用Sikuli?)。