使用Selenium Webdriver

时间:2017-08-07 08:51:30

标签: java macos selenium safari webdriver

我们正在使用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 VM与VNC查看器(Sys管理团队为我们的测试提供了MAC VM)。

在MAC上执行测试脚本时,下面的代码并没有最大化Safari浏览器,这对于Windows上的其他浏览器(IE,Chrome和Firefox)来说效果很好。由于这个原因,我们无法在应用程序中找到一些控件。

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

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

请帮助克服Safari浏览器在MAC上的最大化问题。

我真的认为我的问题已经通过这个解决方案解决了,尝试了代码来最大化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:检测到的方言:线程“main”中的OSS异常   org.openqa.selenium.NoSuchWindowException:使用窗口的请求   无法满足,因为无法找到窗口。   (警告:服务器未提供任何堆栈跟踪信息)   命令持续时间或超时:27毫秒构建信息:版本:   '3.4.0',修订版:'5234b32',时间:'2017-03-10 09:04:52 -0800'系统   info:host:'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,rotate = 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)       在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)

2 个答案:

答案 0 :(得分:5)

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

工作代码是

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

答案 1 :(得分:-1)

我们已观察到新驱动程序库的错误。您可以使用稍微陈旧的罐子来处理新的浏览器版本。

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

示例: -

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

    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);

OR

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");

OR

((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/

希望它会对你有所帮助:)。