ChromeDriver是否支持Rotatable for mobileEmulation

时间:2015-01-09 00:09:07

标签: java selenium-webdriver automated-tests google-chrome-devtools selenium-chromedriver

我正在使用Selenium 2.44和ChromeDriver 2.13测试网络应用。我正在使用Chromes移动仿真来模拟从移动设备连接。我需要在测试过程中将画面方向从纵向更改为横向,我似乎无法使其正常工作。

尝试将WebDriver扩展为Rotatable的示例代码如下所示,但在尝试强制转换为Rotatable时抛出了ClassCastException。有人可以告诉我,如果我做错了或者ChromeDriver不支持轮换吗?

package test;

import org.openqa.selenium.Rotatable;
import org.openqa.selenium.ScreenOrientation;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.AddRotatable;
import org.openqa.selenium.remote.Augmenter;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        System.setProperty(
              "webdriver.chrome.driver",
              "Path/To/chromedriver.exe"
        );

        Map<String, String> mobileEmulation = new HashMap<>();
        mobileEmulation.put("deviceName", "Google Nexus 4");

        Map<String, Object> chromeOptions = new HashMap<>();
        chromeOptions.put("mobileEmulation", mobileEmulation);

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
        capabilities.setCapability(CapabilityType.ROTATABLE, true);

        WebDriver driver = new ChromeDriver(capabilities);

        driver.get("http://m.rte.ie");

        // Try and rotate
        Augmenter augmenter = new Augmenter();
        augmenter.addDriverAugmentation(CapabilityType.ROTATABLE, new AddRotatable());
        WebDriver augmentedDriver = augmenter.augment(driver);
        ScreenOrientation currentOrientation = ((Rotatable) augmentedDriver).getOrientation();
        System.out.println(String.format("Current Orientation is: %s", currentOrientation));

        driver.quit();
    }
}

Chrome似乎支持切换方向,如下所示:(https://developer.chrome.com/devtools/docs/device-mode)如果查看上面的部分,&#39;交换维度&#39;。我在浏览器中手动尝试了它,它工作正常。只是想知道ChromeDriver是否不支持Rotatable接口,有没有办法快速更新屏幕尺寸?

2 个答案:

答案 0 :(得分:3)

这是一个艰难的。希望这为某人节省了相当多的努力。目前,ChromeDriver仅支持移动仿真模式下的纵向方向。没有任何解决方法可以将它作为选项传递,也无法从javascript触发。

然而,有一个似乎对我有用的解决方案。您需要做的只是使用代表您设备的userAgent选项启动ChromeDriver。例如,以下是iPad仿真的样子:

<page>
   <head>
        <!-- Remove local resources -->
        <remove src="css/styles-m.css" />

  </head>
..

</page>

此外,您可能希望设置类似于模拟设备的尺寸。这有点棘手,因为只能在ChromeOptions中设置窗口大小。再次,使用此工具:Chrome viewport dimensions plugin您可以找到正确的分辨率。就我而言,视口的1024x768对应于窗口大小的1039x859。

P.S。它只能在驱动程序启动时完成。无法动态改变方向

答案 1 :(得分:1)

它似乎接受“deviceOrientation”作为容量,其值为“portrait”和“landscape”,但不幸的是,这还没有实现。

等待同样的答案。