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。有人可以帮忙吗?
- 硒版本:4.1.0
- Chrome 驱动程序:100.0(最新)
能力
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
我正在尝试从 Selenium 3 升级到 Selenium 4。这些功能和一切都适用于远程在 sauce labs 上的所有浏览器,甚至在本地也能正常运行,但在设备方面(Android Ipad/Mobile 和 iOS Ipad/Mobile) 我得到 org.openqa.selenium.UnsupportedCommandException。有人可以帮忙吗?
- 硒版本:4.1.0
- Chrome 驱动程序:100.0(最新)
能力
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