【问题标题】:Is there a way to disable Safari Webdriver Glass Pane有没有办法禁用 Safari Webdriver Glass Pane
【发布时间】:2020-05-22 12:13:25
【问题描述】:

根据 Apple 的 Safari Webdriver Doc,在运行自动化窗口时插入了一个玻璃窗格,以防止在用于 Webdriver 测试时与浏览器交互。有没有办法禁用这个玻璃窗格?

背景信息:

我想禁用这个玻璃窗格的原因是我有一个 nginx 身份验证弹出窗口,我想关闭它。(像这样在 url 中注入身份验证 -> https://username:password@restofurl.com 甚至在 Safari 中都不起作用)。

Selenium 的 Webdriver 解决方案:

Alert alert = webDriver.switchTo().alert(); alert.sendkeys("whatever"); //Does not work

所以我选择了一个不同的解决方案,即 AWT Robot,它在 Chrome 中运行良好,但在 Safari 中由于 Glass Pane 而无法运行:

try {
    Robot robot = new Robot();
    robot.mouseMove(820, 290);
    robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
} catch(AWTException e) {
    e.printStackTrace(); //Log exception
}

但不幸的是,这种方法通过与 Safari Webdriver 的玻璃窗格交互而中断了测试,因此这就是我要禁用它的原因。

提前致谢!

【问题讨论】:

    标签: java selenium selenium-webdriver awtrobot safaridriver


    【解决方案1】:

    如何调用webdriver:

    我是这样称呼它的

      public class Browser
    {
        public static IWebDriver Instance { get; set; }
        public static IWebDriver _webDriver = new ChromeDriver();
        public static string _baseUrl = "http://web page/#/login";
        //public static string _baseUrl = "https://login Page/#/login";
        public static ISearchContext Driver { get { return _webDriver; } }
    
        internal static bool WaitElementIsDisplayed(By element, int timeout)
        {
    
            for (int i = 0; i < timeout; i++)
            {
                if (ElementIsDisplayed(element))
                {
                    return true;
                }
                Thread.Sleep(9000);
            }
            return false;            
        }
    

    这个页面也有如下方法

       public static void PopUp()
        {
            _webDriver.SwitchTo().Alert().Accept();
        }
    

    从有测试代码的方法调用,而不是从测试类调用

    你的情况

        try {
        Robot robot = new Robot();
        robot.mouseMove(820, 290);
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
        xxxx.PopUp();
    } catch(AWTException e) {
        e.printStackTrace(); //Log exception
    }
    

    【讨论】:

    • 使用警报警报 = webDriver.switchTo().alert();不适用于它的任何方法
    • "_webDriver.SwitchTo().Alert().Accept();"在我的情况下将无法工作,并且由于我提到的 GlassPane,机器人无法在不中断自动化测试的情况下与浏览器交互。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多