Selenium WebDriver:验证页面上显示的打印窗口对话框

时间:2014-02-25 12:28:14

标签: java selenium-webdriver

我有一个方案可以在点击“打印”链接后验证打开属性对话框(Windows组件)是否正确打开。意识到Java中的Robot实用程序类可以模拟Escape / Enter等键盘事件来操作该窗口。

我们有什么方法可以验证打开的新对话框是否是打印对话框 - 用于验证对话框标题,即打印或从该窗口对话框中检索文本或其他内容否则将确认对话框为打印对话框。

Print Window dialog

2 个答案:

答案 0 :(得分:1)

打印对话框来自os,其中selenium无法处理。因此,您将无法检查是否存在。我能想到的唯一方法是使用java.awt.Robot,发送VK_ESCAPE并断言测试继续。

作为首发,您可以试试这个:

     Runnable r = new Runnable() {

        @Override
        public void run() {

            try {
                Robot r = new Robot();
                r.delay(1000);
                r.keyPress(KeyEvent.VK_ESCAPE);
                r.keyRelease(KeyEvent.VK_ESCAPE);
            } catch (Exception ex) {
                ex.printStackTrace();
            }

        }
    };

    Actions actions = new Actions(getDriver());
    actions.sendKeys(Keys.CONTROL).sendKeys("p");

    Thread t = new Thread(r);
    t.start();

    actions.perform();

    //some stupid asserts that we reached here

答案 1 :(得分:1)

如果您在Windows中运行(我假设您是这样),您可以使用visual studio附带的inspect.exe工具。它允许您与对话框进行交互,甚至可以准确地发送您想要的任何信息,包括从下拉列表中选择元素或任何其他需要的交互。如果您希望使用selenium保存文件,这甚至可以工作,但是为了回答您的问题,您甚至可以使用它来检测该窗口是否确实存在。你打算如何从那里继续前进。

 //using System.Windows.Automation;
 //using System.Windows.Forms;

 AutomationElement desktop = AutomationElement.RootElement;
 AutomationElement Firefox = desktop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "MozillaWindowClass"));
 AutomationElement PrinterComboBox = PrintForm1.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "1139"));
 SelectionPattern selectPrinterComboBox = (SelectionPattern)PrinterComboBox.GetCurrentPattern(SelectionPattern.Pattern);
 AutomationElement ItemInDropdown = PrinterComboBox.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "SelectPrintMethod"));
 SelectionItemPattern ItemInDropdownSelectItem = (SelectionItemPattern)ItemInDropdown.GetCurrentPattern(SelectionItemPattern.Pattern);
 ItemInDropdownSelectItem.Select();
 AutomationElement OKButton = PrintForm1.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "1"));
 InvokePattern ClickOK = (InvokePattern)OKButton.GetCurrentPattern(InvokePattern.Pattern);
 ClickOK.Invoke();