无法通过Selenium Webdriver在MAC上最大化Safari浏览器

5
我们正在使用Java和Selenium自动化我们的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 VM和VNC查看器(Sys管理员团队为我们的测试提供了MAC VM)。
在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',操作系统名称: 'Mac OS X',操作系统架构: 'x86_64',操作系统版本: '10.12.6',Java版本: '1.8.0_121' 驱动程序信息: org.openqa.selenium.safari.SafariDriver 能力 [{applicationCacheEnabled=true, rotatable=false, databaseEnabled=true,handlesAlerts=true, version=12603.3.8, cleanSession=true,platform=MAC, nativeEvents=true, locationContextEnabled=false,webStorageEnabled=true,browserName=safari, javascriptEnabled=true, platformName=macOS, cssSelectorsEnabled=true}] 会话ID:BA265536-18D3-490E-B6DB-40D8BBF25937 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:638) at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteWindow.setSize(RemoteWebDriver.java:860) at Sample.Safari.main(Safari.java:20)

2个回答

6

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

下面是可行的代码

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

2
嗨,我写了修复程序。我可以确认Safari 11及更高版本不应该出现问题描述中的问题。 - Brian Burg

-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浏览器上遇到了问题。 - SeJaPy
我试图运行代码来最大化Safari,但是却遇到了异常。我以为使用提供的解决方案可以解决我的问题,但是我们并没有那么幸运。 - SeJaPy
你有没有尝试过 ((IJavaScriptExecutor)driver).ExecuteScript("window.resizeTo(1024, 768);"); 这个方法? - Shubham Jain
JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.resizeTo(1360, 768)"); 这段代码也无法正常工作。 - SeJaPy
让我们在聊天中继续这个讨论 - SeJaPy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接