首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于酱油实验室的org.openqa.selenium.UnsupportedCommandException (设备)

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

Stack Overflow用户
提问于 2022-04-07 12:20:37
回答 1查看 621关注 0票数 1

我正在尝试从Selenium 3升级到Selenium 4。这些功能和所有的功能都可以在沙司实验室远程运行,甚至在本地也很好,但是当涉及到设备(Android/Mobile和iOS Ipad/Mobile)时,我得到了iOS。有人能帮忙吗?

  • 硒版本: 4.1.0
  • Chrome驱动程序: 100.0 (最新)

功能

代码语言:javascript
复制
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));

代码语言:javascript
复制
    private ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
     public WebDriver getWebDriver() {
    if (!BaseTest.isLocal) {
        return webDriver.get();
    } else {
        return localWebDriver;
    }
}

误差

失败: com.dell.tnt.tests.WFTTests.Selenium_4_Test.Selenium4(java.lang.String,Selenium4("Chrome“、”最新版本“、"Android”、"7.1“、”三星Galaxy Tab A 10 GoogleAPI仿真器“)抛出java.lang.InterruptedException、com.dell.tnt.exceptions.OfferNotFoundException,java.io.IOException、java.lang.NullPointerException、java.lang.IndexOutOfBoundsException。( org.openqa.selenium.UnsupportedCommandException:) '/wd/hub/session/XXXXXXXX-XXXX-XXXX-XXXX-XXXXf7ad4561/window/new‘没有映射到有效资源

ErrorImage

试用版:

代码语言:javascript
复制
    // 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:苏克拉布

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-07 19:11:31

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

显然,问题是Appium现在根本不支持window/new路由。Appium团队已经意识到了这一点,他们将在将来的版本中添加它(然后它将只在安卓上工作,而不是iOS)。Appium杂志:https://github.com/appium/appium/issues/16749

这里有几件事。

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

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

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

一种很好的方法是使用Sauce Labs平台Configurator获得基线:https://saucelabs.com/platform/platform-configurator注意,这是用于使用Selenium代码,而不是Appium代码。另外,这也适用于模拟器/模拟器代码。真正的设备是相似的,只是有不同的设备名称。最后,它使用MutableCapabilities而不是浏览器选项类,因为这更容易在后端生成,而不是因为它是首选的。

看起来会是这样的:

代码语言:javascript
复制
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:https://docs.saucelabs.com/basics/data-center-endpoints/#us-west-data-center中有一些问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71782096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档