Skip to content

Wrong JSON for chromeOptions #1336

Description

@parunruaivo

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] 

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions