org.openqa.selenium.UnsupportedCommandException 用于酱汁实验室的 appium(设备)

org.openqa.selenium.UnsupportedCommandException for appium (devices) for sauce labs

我正在尝试从 Selenium 3 升级到 Selenium 4。这些功能和一切都适用于远程在 sauce labs 上的所有浏览器,甚至在本地也能正常运行,但在设备方面(Android Ipad/Mobile 和 iOS Ipad/Mobile) 我得到 org.openqa.selenium.UnsupportedCommandException。有人可以帮忙吗?

能力

else if (!BaseTest.isLocal && BaseTest.Devices) {
DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("appiumVersion", "1.17.1");
        capabilities.setCapability("deviceOrientation", "portrait");
        capabilities.setCapability("browserName", browser);
        capabilities.setCapability("browserVersion", version);
        capabilities.setCapability("platformName", os);
        capabilities.setCapability("seleniumVersion", "4.1.0");
        capabilities.setCapability("deviceName", devicename);
        capabilities.setCapability("platformVersion", platformversion);
        capabilities.setCapability("name", methodName);
        capabilities.setCapability("autoAcceptAlerts", "true");
        System.out.println("pop-up alerts disabled for IOS");

        if (browser.toLowerCase().contains("chrome")) {
            ChromeOptions options = new ChromeOptions();
            options.addArguments("disable-translate");
            options.addArguments("disable-translate-new-ux");
            capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        }

        if (buildTag != null) {
            capabilities.setCapability("build", buildTag);
        }

        // Launch remote browser and set it as the current thread
        webDriver.set(new RemoteWebDriver(
                new URL("https://" + username + ":" + accesskey + "@ondemand.saucelabs.com:443/wd/hub"),
                capabilities));

代码

    private ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
     public WebDriver getWebDriver() {
    if (!BaseTest.isLocal) {
        return webDriver.get();
    } else {
        return localWebDriver;
    }
}

错误

失败:Selenium4("Chrome", "latest-1", "Android", "7.1", "Samsung Galaxy Tab A 10 GoogleAPI Emulator", public void com.dell.tnt.tests.WFTTests.Selenium_4_Test.Selenium4(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.reflect.Method ) 抛出 java.lang.InterruptedException,com.dell.tnt.exceptions.OfferNotFoundException,java.io.IOException,java.lang.NullPointerException,java.lang.IndexOutOfBoundsException,java.lang.ArrayIndexOutOfBoundsException) org.openqa.selenium.UnsupportedCommandException: URL“/wd/hub/session/XXXXXXXX-XXXX-XXXX-XXXX-XXXXf7ad4561/window/new”未映射到有效资源

[错误图像][1]

试用版本:

    // Mobile Devices
        MutableCapabilities caps = new MutableCapabilities();
        caps.setCapability("platformName", os);
        caps.setCapability("deviceOrientation", "portrait");
        caps.setCapability("browserName", browser);
        caps.setCapability("appium:deviceName", devicename);
        caps.setCapability("appium:platformVersion", platformversion);
        MutableCapabilities sauceOptions = new MutableCapabilities();
        sauceOptions.setCapability("name", methodName);
        sauceOptions.setCapability("appiumVersion", "1.17.1");
        caps.setCapability("sauce:options", sauceOptions);

        if (buildTag != null) {
            caps.setCapability("build", buildTag);
        }

        // Launch remote browser and set it as the current thread
        webDriver.set(new RemoteWebDriver(
                new URL("https://" + username + ":" + accesskey + "@ondemand.saucelabs.com:443" + "/wd/hub"),
                caps));

**错误 Error1

Saucelab:Saucelab

更新: 我忙于确保设置为您提供有效的 w3c 会话,这是该命令在桌面测试中工作所必需的。

显然,问题在于 Appium 目前根本不支持 window/new 路由。 Appium 团队已经意识到这一点,他们会在未来的版本中添加它(然后它将只适用于 Android,而不适用于 iOS)。 Appium 问题:https://github.com/appium/appium/issues/16749


这里有几件事。

对于移动浏览器,您可以在本地使用 Selenium 代码,但您的代码将被发送到 Appium 服务器,而不是 Sauce Labs VMs/Devices 上的 Selenium 服务器。期待看到 Selenium 4 的有效 w3c 兼容功能。

对于 w3c 和 Selenium 4,理论上一切都应该直接使用浏览器选项 class;没有 DesiredCapabilities,只有 ChromeOptions,等等

至于 Sauce 有哪些功能以及如何使用它们, 我最近更新了这个文档,所以它应该是最新的:https://docs.saucelabs.com/dev/test-configuration-options/

开始的一个好方法是使用 Sauce Labs 平台配置器来获取您的基线:https://saucelabs.com/platform/platform-configurator 请注意,这是使用 Selenium 代码,而不是 Appium 代码。此外,这是针对 emulator/simulator 代码的。真实设备类似,只是设备名称不同。最后它使用 MutableCapabilities 而不是浏览器选项 classes 因为它更容易在后端生成而不是因为它是首选。

看起来像这样:

MutableCapabilities caps = new MutableCapabilities();
caps.setCapability("platformName", "iOS");
caps.setCapability("browserName", "Safari");
caps.setCapability("appium:deviceName", "iPhone Simulator");
caps.setCapability("appium:platformVersion", "15.4");
MutableCapabilities sauceOptions = new MutableCapabilities();
sauceOptions.setCapability("appiumVersion", "1.22.3");
caps.setCapability("sauce:options", sauceOptions);

最后,您应该更新端点,因为旧端点在 w3c + Real Devices 中存在一些问题: https://docs.saucelabs.com/basics/data-center-endpoints/#us-west-data-center