2014-09-10 43 views
1

我目前正在使用硒web驱动程序自动执行功能测试。我遇到了一个场景,在这个场景中,我需要点击窗口上的打印按钮(比如说A),打开一个新窗口(比如说B)。打印对话也会弹出窗口B.我需要使用java脚本执行程序关闭该打印对话框。在硒中使用javascriptexecutor单击打印按钮时无法关闭打印对话框Web驱动程序firefox

我试过这个。但它不起作用。我的代码:

public void handlePrintButtonScenario { 
String parentWindow_A = driver.getWindowHandle(); //get the current window A handle 
Printbutton().click(); //clicking print button 

//switch focus of web driver to newly opened window B 

for (String winhandle : driver.getWindowHandle()) { 

driver.switchTo().window(winhandle); 
} 

//closing printdialoge 
closeWindowByJS(); 

driver.close();// closing window B 

driver.switchTo().window(parentWindow_A); // switching focus to window A 

} 

public void closeWindowByJS() { 
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    String script = "window.onbeforeunload = null;" + "window.close();"; 
    js.executeScript(script); 
} 

现在发生了什么打印对话和橱窗内得到,当我通过调用方法closeWindowByJS执行首次场景关闭()。我在driver.close()行得到异常,说没有找到这样的窗口。

但是,当我重新运行方案,即从第二次无打印对话也不橱窗内关闭掉。但重点得到了适当的改变,场景也正常运行。

,但我需要先关闭打印对话框使用javascriptexecutor然后关闭窗口B.我不需要通过调用closeWindowByJS关闭这两个()。这需要切换后集中到窗口A.

请帮助?

+0

请帮助我解决此问题....迫切需要解决方案。 – praveen 2014-09-11 16:39:49

回答

0

使用了AutoIt 下载exe文件记录点击按钮,记录代码 执行的AutoIt的代码相同的Java脚本executator

您driver.close() 应该是开关的代码之后窗口()

这应该有助于

+0

我无法使用autoit,因为我没有被授权使用任何exe文件。您能否让我知道任何备用解决方案。我使用Firefox作为浏览器。 – praveen 2014-09-12 18:53:24

+0

谢谢你的回复。我需要先关闭自动弹出窗口B的打印对话框。由于硒驱动程序无法处理这些弹出窗口,这就是为什么我必须使用JavaScript注入。之后,我必须关闭窗口B.这可以通过使用driver.close()来处理。我会尝试你所建议的。如果您使用此代码或Java脚本代码获得任何其他解决方法。请告诉我。而且当我最终切换到A时,我也不需要关闭窗口A.我只需要关闭打印对话框然后窗口B. – praveen 2014-09-13 13:17:27

+0

嗨班萨尔沙阿,我尝试了你的建议。不幸的是它没有奏效。你能否建议其他解决方法?谢谢 – praveen 2014-09-15 14:03:54

0

我知道这是有点老了,但也许这将帮助别人。

首先,这段代码只能得到一个句柄,driver.getWindowHandles()得到句柄的Set,可以迭代。其次,webdriver实例会切换到每一个窗口,但是并没有对它做任何事情。这只是为了结束?

for (String winhandle : driver.getWindowHandle()) { 

    driver.switchTo().window(winhandle); 
} 

如果是这样的而不是使用一个for循环的情况下,你可以投的设置到一个ArrayList,并得到在列表的末尾最近的一次。

List<String> handles = new ArrayList<>(driver.getWindowHandles()); 
driver.switchTo().window(handles.get(handles.size()-1); 

虽然这不是真的。

不幸的是,webdriver的无法处理的打印对话框。这些提示与网页无关,并且是Web浏览器的一项功能。如果javascript可以访问这些可以与您的文件系统交谈的提示,那么会存在安全问题。如果您有兴趣了解更多信息,请参阅 http://en.wikipedia.org/wiki/Same-origin_policyhttp://en.wikipedia.org/wiki/Sandbox_(computer_security)了解JavaScript限制如何阻止它与这些类型的提示进行交互。

由于打印提示不是一个窗口,并且webdriver看不到,所以当您尝试关闭打印对话框时,实际上正在关闭窗口B.WebDriver的不同实现可能会因此行为而产生不同的结果。 FirefoxDriver可能与ChromeDriver的反应方式不同。您可能必须做的是在关闭窗口B后明确地将您的webdriver切换回父窗口A.在尝试进行任何交互之前,您应该使用driver.switchTo().window(parentWindow_A),以确保WebDriver不坐在没有窗户焦点的位置。

如果您必须与这些提示进行交互并正在使用Java。然后你可以使用java.awt.Robot来驱动桌面鼠标来执行点击操作。但是这可能是一个混乱的解决方案,因为你只能移动到像素坐标。所以你必须把它放在你期望按钮的位置。下面是如何使用绝对屏幕坐标使用机器人的基本示例http://alvinalexander.com/java/java-robot-class-example-mouse-keystroke

相关问题