C# 取消打印对话框的接受场景和方法

C# 取消打印对话框的接受场景和方法,c#,selenium-webdriver,specflow,scenarios,C#,Selenium Webdriver,Specflow,Scenarios,我正在使用specflow场景功能文件和要执行的步骤进行自动测试。我在chrome中执行取消打印对话框的场景时被绊倒了 Scenario:User can get report When I select 'All ' tab And I click on Report Icon to preview the page And I click the cancel button Then the preview page should be c

我正在使用specflow场景功能文件和要执行的步骤进行自动测试。我在chrome中执行取消打印对话框的场景时被绊倒了

Scenario:User can get report 
    When I select 'All ' tab
        And I click on Report Icon to preview the page
        And I click the cancel button
     Then the preview page should be closed
它无法识别“取消”按钮。我应该添加与web驱动程序相关的still吗

因为当我点击报告图标时,新的chrome实例被创建

  • 首先,我建议您重新考虑您的方法,因为测试浏览器打印对话框不是您通常应该做的事情
  • 如果您仍然决定转到该方向,请注意“取消”按钮隐藏在中,因此您需要识别所有元素,将它们转换到,找到“有趣”的子元素,然后重复

    示例代码:

    driver.SwitchTo().Window(driver.WindowHandles[1]);
    IWebElement printPreviewApp = driver.FindElement(By.TagName("print-preview-app"));
    IWebElement printPreviewAppConten = expandShadowRoot(printPreviewApp, driver);
    IWebElement printPreviewSidebar = printPreviewAppConten.FindElement(By.TagName("print-preview-sidebar"));
    IWebElement printPreviewSidebarContent = expandShadowRoot(printPreviewSidebar, driver);
    IWebElement printPreviewHeader = printPreviewSidebarContent.FindElement(By.TagName("print-preview-header"));
    IWebElement printPreviewHeaderContent = expandShadowRoot(printPreviewHeader,driver);
    printPreviewHeaderContent.FindElements(By.TagName("paper-button"))[1].Click();
    
    关联的
    expandShadowRoot
    函数:

    private IWebElement expandShadowRoot(IWebElement parent, IWebDriver driver) {
        return (IWebElement) ((IJavaScriptExecutor )driver).ExecuteScript("return arguments[0].shadowRoot", parent);
    }
    

  • 如果您想使用javascript处理此问题,非常感谢,在经过一整天的工作和各种库之后发现了这种方法。
    private IWebElement expandShadowRoot(IWebElement parent, IWebDriver driver) {
        return (IWebElement) ((IJavaScriptExecutor )driver).ExecuteScript("return arguments[0].shadowRoot", parent);
    }