【问题标题】:Unable to maximize Safari browser on MAC with Selenium Webdriver无法使用 Selenium Webdriver 在 MAC 上最大化 Safari 浏览器
【发布时间】:2018-01-14 12:34:34
【问题描述】:

我们使用 Selenium 和 Java 来自动化我们的 Web 应用程序。我们有工作代码可以在 Windows 操作系统上为三种浏览器(IE、Chrome、Firefox - 最新版本)运行自动化测试脚本。

我们需要在 MAC 操作系统 - Safari 浏览器上运行自动化测试脚本。

环境详情:

MAC OS 版本:macOS Sierra 版本 10.12.5

Safari浏览器版本:10.1.1(12603.2.4)

Selenium 独立服务器版本:3.4.0

Java 版本:1.8.0_112

将 MAC 虚拟机与 VNC 查看器连接(系统管理员团队为我们的测试提供了 MAC 虚拟机)。

在 MAC 上执行测试脚本时,下面的代码并没有最大化 Safari 浏览器,这在 Windows 上的其他浏览器(IE、Chrome 和 Firefox)上运行良好。因此,我们无法找到应用程序中的某些控件。

driver.manage().window().maximize();

我们没有收到任何异常,代码正在执行但没有执行任何操作。

请帮助解决 MAC 上的 Safari 浏览器最大化问题。

真的,我认为我的问题已通过此解决方案解决,尝试了代码以最大化 Safari 浏览器,但出现异常。

代码:

 SafariOptions options = new SafariOptions();
options.setUseCleanSession(true);
driver = new SafariDriver(options);
JavascriptExecutor jse = (JavascriptExecutor)driver;
String screenWidth = jse.executeScript("return screen.availWidth").toString();
String screenHeight = jse.executeScript("return screen.availHeight").toString();
int intScreenWidth = Integer.parseInt(screenWidth);
int intScreenHeight = Integer.parseInt(screenHeight);
org.openqa.selenium.Dimension d = new org.openqa.selenium.Dimension(intScreenWidth, intScreenHeight);
driver.manage().window().setSize(d);

例外:

2017 年 8 月 7 日下午 3:11:53 org.openqa.selenium.remote.ProtocolHandshake createSession INFO:检测到方言:线程“主”中的 OSS 异常 org.openqa.selenium.NoSuchWindowException:使用窗口的请求 无法满足,因为找不到窗口。 (警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:27 毫秒构建信息:版本: '3.4.0',修订:'5234b32',时间:'2017-03-10 09:04:52 -0800'系统 信息:主机:'Mac.local',IP:'fe80:0:0:0:4c6:11dc:3f91:11f8%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '1.8.0_121' 驱动信息: org.openqa.selenium.safari.SafariDriver 功能 [{applicationCacheEnabled=true, 可旋转=false, databaseEnabled=true, handleAlerts=true,版本=12603.3.8,cleanSession=true, 平台=MAC,nativeEvents=true,locationContextEnabled=false, webStorageEnabled=true, browserName=safari, javascriptEnabled=true, platformName=macOS, cssSelectorsEnabled=true}] 会话 ID: BA265536-18D3-490E-B6DB-40D8BBF25937 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:638) 在 org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteWindow.setSize(RemoteWebDriver.java:860) 在 Sample.Safari.main(Safari.java:20)

【问题讨论】:

    标签: java macos selenium safari webdriver


    【解决方案1】:

    我们发现新的驱动程序库存在错误。您可以使用能够处理新浏览器版本的稍微旧的 jar。

    您也可以使用其他选项来最大化浏览器窗口。

    示例:-

    添加以下选项并将其传递给驱动程序:-

        chromeOptions.addArguments("--start-maximized");
    

    完整的代码如下所示:-

    System.setProperty("webdriver.chrome.driver","D:\\Workspace\\JmeterWebdriverProject\\src\\lib\\chromedriver.exe");
    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.addArguments("--start-maximized");
    driver = new ChromeDriver(chromeOptions);
    

    或

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    int Width = (int) toolkit.getScreenSize().getWidth();
    int Height = (int)toolkit.getScreenSize().getHeight();
    //For Dimension class, Import following library "org.openqa.selenium.Dimension"  
    driver.manage().window().setSize(new Dimension(Width,Height));
    driver.get("https://google.com");
    

    或

    ((IJavaScriptExecutor)driver).ExecuteScript("window.resizeTo(1024, 768);");
    

    在 safari 上试试这个:-

    JavascriptExecutor jse = (JavascriptExecutor)driver;
    String screenWidth = jse.executeScript("return screen.availWidth").toString();
    String screenHeight = jse.executeScript("return screen.availHeight").toString();
    int intScreenWidth = Integer.parseInt(screenWidth);
    int intScreenHeight = Integer.parseInt(screenHeight);
    Dimension d = new Dimension(intScreenWidth, intScreenHeight);
    driver.manage.window.setSize(d);
    

    下面的文章将详细介绍这些示例:-

    http://www.abodeqa.com/2015/01/20/maximize-window-using-selenium-webdriver-and-by-using-abstract-window-toolkit/

    希望对你有帮助:)

    【讨论】:

    • 感谢您的快速回复。 Safari 浏览器有问题。
    • 我尝试运行代码以最大化 Safari,但出现异常。我认为通过提供的解决方案我的问题得到了解决,但我们没有运气。
    • 你试过 ((IJavaScriptExecutor)driver).ExecuteScript("window.resizeTo(1024, 768);");
    • JavascriptExecutor jse = (JavascriptExecutor)驱动程序; jse.executeScript("window.resizeTo(1360, 768)");此代码也不起作用。
    【解决方案2】:

    将 Safari 版本升级到 11.0(12604.1.35) 后,Safari 浏览器最大化问题得到解决

    而工作代码是

    driver.manage().window().maximize();
    

    【讨论】:

    • 嗨,我写了修复程序。我可以确认 Safari 11 及更高版本不应该出现问题中描述的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2011-03-12
    • 2013-11-27
    • 2020-05-27
    • 2019-03-13
    • 2021-05-16
    相关资源
    最近更新 更多