Description
Description
When trying to disable the w3c using the following lines
val chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("w3c", false);
desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
When parsing the capabilities in the class AppiumServiceBuilder
the chromeOptions is parsed with String.valueOf(value)
in the method parseCapabilitiesIfWindows
, resulting in \"goog:chromeOptions\": {args=[], extensions=[], w3c=false}
, then when executing the command line in the method executeAsync()
of the class OsProcess
the org.apache.commons.exec.CommandLine cl;
is as below
[C:\Program Files\nodejs\node.exe, C:\Program Files\nodejs\node_modules\appium\build\lib\main.js, --port, 39775, --address, 127.0.0.1, --chromedriver-executable, D:\TESTRIGOR\Vagrant\temp\81\chromedriver.exe, --default-capabilities, {\"acceptSslCerts\": true, \"autoGrantPermissions\": true, \"automationName\": \"UIAutomator2\", \"avd\": \"android-26-pixel-xl\", \"avdArgs\": \"-no-audio -writable-system -ports 0,5563\", \"avdLaunchTimeout\": 180000, \"avdReadyTimeout\": 180000, \"browserName\": \"chrome\", \"clearSystemFiles\": true, \"deviceName\": \"android-26-pixel-xl\", \"disableAndroidWatchers\": true, \"goog:chromeOptions\": {args=[], extensions=[], w3c=false}, \"nativeWebScreenshot\": true, \"newCommandTimeout\": 900, \"platformName\": \"Android\", \"platformVersion\": \"8.0.0\", \"uiautomator2ServerInstallTimeout\": 120000}]
Having a wrong JSON because of the args=[], extensions=[], w3c=false
Workaround
I created the class
@FieldDefaults(level = PRIVATE, makeFinal = true)
@RequiredArgsConstructor
public class W3cOption {
boolean value;
public Map<String, Object> asMap() {
return ImmutableMap.of("w3c", value);
}
@Override
public String toString() {
if (Platform.getCurrent().is(Platform.WINDOWS)) {
return "{\\\"w3c\\\": " + value + "}";
}
return "{\"w3c\": " + value + "}";
}
}
And added to capabilities
desiredCapabilities.setCapability(MobileCapabilityType.FORCE_MJSONWP, true);
desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, new W3cOption(false));
Environment
Java client build version: 7.3.0
Appium server version: 1.17.0
Desktop OS: Windows 8.1
Node.js version: 12.16.2
Mobile platform: Android 8.0
Emulator
Exception Stacktraces
usage: C:\Program Files\nodejs\node_modules\appium\build\lib\main.js
[-h] [-v] [--shell] [--allow-cors] [--reboot] [--ipa IPA] [-a ADDRESS]
[-p PORT] [-pa BASEPATH] [-ca CALLBACKADDRESS] [-cp CALLBACKPORT]
[-bp BOOTSTRAPPORT] [-r BACKENDRETRIES] [--session-override] [-l]
[-g LOGFILE]
[--log-level {info,info:debug,info:info,info:warn,info:error,warn,warn:debug,warn:info,warn:warn,warn:error,error,error:debug,error:info,error:warn,error:error,debug,debug:debug,debug:info,debug:warn,debug:error}]
[--log-timestamp] [--local-timezone] [--log-no-colors] [-G WEBHOOK]
[--safari] [--default-device] [--force-iphone] [--force-ipad]
C: \ P r o g r a[m- -trFaicleetse\mnpoldaetjes \AnUoTdOeM_AmToIdOuNlTeRsA\CaEpTpEiMuPmL\ATbEuPiAlTdH\]l
i b \[m-a-iinn.sjtsr:uments INSTRUMENTSPA error: aTrgHu]m e[nt "---dnco/d-e-cdoenffaiugl tNO-DEcCaOpNaFbIiGl]i
t i[-ersa "R:OB OTIADnDRvESaSl]i [d- rppa rRsOeBDOTePfORTa]u
l [-t-cCharopmesdr ivvearl-euxeecu:t ab{l"e aCHROMcEcDeptSslCReIrVtEsR"E:X EtCrUuTeA,B L"Ea]u t[o-G-rsahnotwP-ecromnifsisgion]s"
: t r u e ,[ -"-anuot-opmearmtsi-ocnhNeacmke]" :[ -"-UsItAruitcotm-actaopr2s"], ["-a-vids"o:l a"taen-dsriomi-dd-e2v6i-cpei]x
e l[--x-lt"m,p "TaMvPdDAIrRg]s "[:- -"t-rnaoc-ea-uddiiro T-RwACrEiDtIaRb]l e[--syste-mde bu-g-ploog-rsptacsi ng0]
, 5 5 6 3["-,- s"uapvpdrLeasusn-cahdTbi-mkeiolult-"s:e 1r8v0e0r0]0 ,[ -"-alvodRnega-dsytTaicmketoruatc"e:]
1 8 0 0 0 0[,- -"wberbokwiste-rdNeabmueg"-:p r"ocxhyr-opmoer"t, W"EcBleKIaTrDSEyBsUtGePmRFOiXlYPeOsR"T:]
t r u e , ["-d-ewveibcderNiavmeer"a:g e"natn-dprooritd -W2D6A-LpOiCxAeLlP-OxRlT"], ["-ddics aDbElFeAAUnLdTrCoAiPdWAaBtIcLhIeTIrESs]"
: t r u e[,- -"rgeoloagx:ecdh-rsoemceuOrpittiyo]n s[-"-: a{lalrogws-=i[n]s,e ceuxrtee nAsLiLoOnWsI=NS[E]C,U REw]
3 c = f a[l-s-ed}e,n y"-niantsievceuWreeb SDcErNeYeInNsShEoCtU"R:E ]t
r u e , "[n-e-wCcoommmmaannddT-itmiemoeuotu"t: 9D0E0F,A U"LpTlCaOtMfMoArNmDNTaImMeE"O:U T"]A n[d-rko]i
d " , " p[l-a-tpfloartmfVoerrms-inoanm"e PLA:T F"O8R.M0N.A0M"E,] ["-u-ipaluattofmoartmo-rv2eSresrivoenr IPnLsAtTaFlOlRTMiVmEReSIoOuNt]"
: 1 2 0 0[0-0}-
automation-name AUTOMATIONNAME] [--device-name DEVICENAME]
[--browser-name BROWSERNAME] [--app APP] [-lt LAUNCHTIMEOUT]
[--language LANGUAGE] [--locale LOCALE] [-U UDID]
[--orientation ORIENTATION] [--no-reset] [--full-reset]
[--app-pkg APPPACKAGE] [--app-activity APPACTIVITY]
[--app-wait-package APPWAITPACKAGE]
[--app-wait-activity APPWAITACTIVITY]
[--device-ready-timeout DEVICEREADYTIMEOUT]
[--android-coverage ANDROIDCOVERAGE] [--avd AVD] [--avd-args AVDARGS]
[--use-keystore] [--keystore-path KEYSTOREPATH]
[--keystore-password KEYSTOREPASSWORD] [--key-alias KEYALIAS]
[--key-password KEYPASSWORD] [--intent-action INTENTACTION]
[--intent-category INTENTCATEGORY] [--intent-flags INTENTFLAGS]
[--intent-args OPTIONALINTENTARGUMENTS] [--dont-stop-app-on-reset]
[--calendar-format CALENDARFORMAT] [--native-instruments-lib]
[--keep-keychains] [--localizable-strings-dir LOCALIZABLESTRINGSDIR]
[--show-ios-log] [--async-trace] [--chromedriver-port CHROMEDRIVERPORT]
Appium Logs
If I fix the JSON to "goog:chromeOptions": {"args":[], "extensions":[], "w3c":false} then it works as the following log.
[Appium] Welcome to Appium v1.17.0
[Appium] Non-default server args:
[Appium] address: 127.0.0.1
[Appium] port: 6789
[Appium] chromedriverExecutable: \temp\81\chromedriver.exe
[Appium] defaultCapabilities: {
[Appium] acceptSslCerts: true
[Appium] autoGrantPermissions: true
[Appium] automationName: UIAutomator2
[Appium] avd: android-26-pixel-xl
[Appium] avdArgs: -no-audio -writable-system -ports 0,5563
[Appium] avdLaunchTimeout: 180000
[Appium] avdReadyTimeout: 180000
[Appium] browserName: chrome
[Appium] clearSystemFiles: true
[Appium] deviceName: android-26-pixel-xl
[Appium] disableAndroidWatchers: true
[Appium] goog:chromeOptions: {
[Appium] args: {
[Appium] }
[Appium] extensions: {
[Appium] }
[Appium] w3c: false
[Appium] }
[Appium] nativeWebScreenshot: true
[Appium] newCommandTimeout: 900
[Appium] platformName: Android
[Appium] platformVersion: 8.0.0
[Appium] uiautomator2ServerInstallTimeout: 120000
[Appium] }
[Appium] Default capabilities, which will be added to each request unless overridden by desired capabilities:
[Appium] acceptSslCerts: true
[Appium] autoGrantPermissions: true
[Appium] automationName: UIAutomator2
[Appium] avd: android-26-pixel-xl
[Appium] avdArgs: -no-audio -writable-system -ports 0,5563
[Appium] avdLaunchTimeout: 180000
[Appium] avdReadyTimeout: 180000
[Appium] browserName: chrome
[Appium] clearSystemFiles: true
[Appium] deviceName: android-26-pixel-xl
[Appium] disableAndroidWatchers: true
[Appium] goog:chromeOptions: {
[Appium] args: {
[Appium] }
[Appium] extensions: {
[Appium] }
[Appium] w3c: false
[Appium] }
[Appium] nativeWebScreenshot: true
[Appium] newCommandTimeout: 900
[Appium] platformName: Android
[Appium] platformVersion: 8.0.0
[Appium] uiautomator2ServerInstallTimeout: 120000
[Appium] Appium REST http interface listener started on 127.0.0.1:6789
[HTTP] --> GET /wd/hub/status
[HTTP] {}
[debug] [GENERIC] Calling AppiumDriver.getStatus() with args: []
[debug] [GENERIC] Responding to client with driver.getStatus() result: {"build":{"version":"1.17.0"}}
[HTTP] <-- GET /wd/hub/status 200 16 ms - 68
[HTTP]