Appium - setting Desired Capabilities in both terminal and test code - iphone

I am trying to set some appium desired capabilities in the terminal window so that I can, for example, run my tests against different simulator devices:
Terminal: $ appium --device-name 'iPhone 6'
However, I am have to setup desired capabilities in my actual code, so I have a valid instance of IOSDriver. I use this code:
capabilities.setCapability("platformName", "iOS");
capabilities.setCapability("platformVersion", "8.3");
capabilities.setCapability("app","../Build/Products/Debug-iphonesimulator/LightAlarm.app");
driver = new IOSDriver(new URL("http://0.0.0.0:4723/wd/hub"),capabilities);
When I run my tests I get an error that deviceName is not being set:
The following desired capabilities are required, but were not provided: deviceName
However, my terminal appium server is all setup correctly:
info: Welcome to Appium v1.4.0 (REV dc30dae9e8fe8c85eeea707dbdbd60350fdff55b)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: [debug] Non-default server args: {"deviceName":"iPhone 6"}
info: Console LogLevel: debug
Any ideas what might be going wrong?

Related

How to debug JavaScript tests in JHipster applications using Karma?

I have a simple monolithic application generated using JHipster v4.10.1 with front-end using Angular 4.x. To run JavaScript unit tests, as suggested in the documentation I ran
./node_modules/karma/bin/karma start src/test/javascript/karma.conf.js --debug
The command runs the tests, reports coverage summary and exits, whether tests all pass or some test fail does not matter. Test run output does show at one point that the debug server is loaded:
21 11 2017 13:41:20.616:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
But because the command exits, the Karma debug server can not be accessed. How to run tests so that Karma console can be used in browser to debug?
Figured out that the magic flag is actually single-run which seems to be true by default. So the main command to run for JS debug is:
yarn test --single-run=false
which in turn runs
$ karma start src/test/javascript/karma.conf.js --single-run=false
With this the command will only exit with explicit kill e.g. with Ctrl+C or Z. Karma debug console can then be accessed on http://localhost:9876/debug.html (assuming default port is not already busy. If it is, test output should tell you which port was chosen).
Additionally you need to disable minimization (and also istanbul config - not sure why) so that you can breakpoint and step through the .ts code in debugger easily. I figured this is done by making following changes in webpack/webpack.test.js file:
Remove following istanbul config from module.rules array:
{
test: /src[/|\\]main[/|\\]webapp[/|\\].+\.ts$/,
enforce: 'post',
exclude: /(test|node_modules)/,
loader: 'sourcemap-istanbul-instrumenter-loader?force-sourcemap=true'
}
Add minimize: false to the LoaderOptionsPlugin under plugins array:
new LoaderOptionsPlugin({
minimize: false,
options: {
tslint: {
emitErrors: !WATCH,
failOnHint: false
}
}
})

Getting INSTALL_FAILED_UPDATE_INCOMPATIBLE error

Appium Server version: 1.7.1
OS: Windows 8
While running the code I got
org.openqa.selenium.WebDriverException:
An unknown server-side error occurred while processing the command.
Original error:
Error executing adbExec.
Original error:
'Command 'D\:\\Android\\android-sdk\\platform-tools\\adb.exe -P 8080 -s ------ install C\:\\Users\\resi\\AppData\\Local\\Programs\\appium-desktop\\resources\\app\\node_modules\\appium\\node_modules\\appium-unlock \\bin\\unlock_apk-debug.apk' exited with code 1';
Stderr: 'Failed to install C:\Users\resi\AppData\Local\Programs\appium-desktop \resources\app\node_modules\appium\node_modules\appium-unlock\bin\unlock_apk-debug.apk:
Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE:
Package io.appium.unlock signatures do not match the previously installed version; ignoring!]'; Code: '1'
error and Appium Setting page is opened and instant closed in real Android device instead of opening app (.apk file)
You need to cleanup the device you are using:
Go to Settings -> Apps
Delete you application under test using Uninstall for all users menu
Delete Appium Settings app
Restart your test and it should work

Running appium with command line from eclipse : Could not initialize ideviceinstaller

First post.
Hi, I'm trying to run appium by executing the following command lines from eclipse:
Process pr = rt.exec(new String[] {"/usr/local/bin/node", "/usr/local/bin/appium"});
And then I run an AppiumDriver with the url and it's capabilities (also from eclipse): AppiumDriver ad = new AppiumDriver(new URL(url), this.capabilities);
These errors follow:
[36minfo[39m: [debug] Dynamic bootstrap path:
/Users/philippe.pageau/Library/Application
Support/appium/bootstrap/bootstrap-072528be314c3cc6.js
[36minfo[39m:
[debug] Reusing dynamic bootstrap:
/Users/philippe.pageau/Library/Application
Support/appium/bootstrap/bootstrap-072528be314c3cc6.js
[36minfo[39m:
[debug] Attempting iOS device log capture via libimobiledevice
idevicesyslog
[33mwarn[39m: Could not capture device log using
libimobiledevice idevicesyslog. Libimobiledevice probably isn't
installed
[36minfo[39m: [debug] Attempting iOS device log capture
via deviceconsole
[33mwarn[39m: Could not capture logs from device.
Continuing without capturing logs.
[36minfo[39m: [debug] Creating iDevice object with udid XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[36minfo[39m: [debug] Couldn't find ideviceinstaller, trying
built-in at
/usr/local/lib/node_modules/appium/build/libimobiledevice-macosx/ideviceinstaller
[36minfo[39m: [debug] Cleaning up appium session [36minfo[39m:
[debug] Error: Could not initialize ideviceinstaller; make sure it is
installed and works on your system
at [object Object].IOS.getIDeviceObj (/usr/local/lib/node_modules/appium/lib/devices/ios/ios.js:909:13)
at [object Object].IOS.installToRealDevice (/usr/local/lib/node_modules/appium/lib/devices/ios/ios.js:856:32)
at /usr/local/lib/node_modules/appium/node_modules/async/lib/async.js:607:21
at /usr/local/lib/node_modules/appium/node_modules/async/lib/async.js:246:17
at iterate (/usr/local/lib/node_modules/appium/node_modules/async/lib/async.js:146:13)
at /usr/local/lib/node_modules/appium/node_modules/async/lib/async.js:157:25
at /usr/local/lib/node_modules/appium/node_modules/async/lib/async.js:248:21
at /usr/local/lib/node_modules/appium/node_modules/async/lib/async.js:612:34
at [object Object]. (/usr/local/lib/node_modules/appium/lib/devices/ios/ios.js:1527:14)
at /usr/local/lib/node_modules/appium/node_modules/underscore/underscore.js:890:21
at [object Object]._onTimeout (/usr/local/lib/node_modules/appium/lib/devices/ios/ios-log.js:166:7)
at Timer.listOnTimeout (timers.js:110:15)
[36minfo[39m: [debug] Responding to client with error: {"status":33,"value":{"message":"A
new session could not be created. (Original error: Could not
initialize ideviceinstaller; make sure it is installed and works on
your system)","origValue":"Could not initialize ideviceinstaller; make
sure it is installed and works on your system"},"sessionId":null}
[36minfo[39m: [37m<-- POST /wd/hub/session [39m[31m500[39m[90m
11133.802 ms - 300[39m [90m[39m
Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: A new session could
not be created. (Original error: Could not initialize
ideviceinstaller; make sure it is installed and works on your system)
(WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 11.35 seconds
The errors show that it didn't find ideviceinstaller nor libimobiledevice (which I both installed)
I followed these instructions
Appium throws "ideviceinstaller" not found when launched through Eclipse - Java
http://technotesonthego.blogspot.ca/2013/10/install-libimobiledevice-on-mac-os-x.html
Note that I wish to execute everything from eclipse, allowing the QA to not worry about those things. It works with the GUI (I uninstalled it afterwards) and it also works when I run appium in the terminal and execute AppiumDriver ad = new AppiumDriver(new URL(url), this.capabilities); with eclipse.
I did my research, and asking the question to stackoverflow is my last resort.
Did I miss something?
EDIT
Also, I tried executing /usr/local/lib/node_modules/appium/build/libimobiledevice-macosx/ideviceinstall‌​er and it gave me this error : dyld: Library not loaded: #executable_path/../lib/libimobiledevice.3.dylib Referenced from: /usr/local/lib/node_modules/appium/build/libimobiledevice-macosx/ideviceinstalle‌​r Reason: image not found Trace/BPT trap: 5
Tried on Appium 1.4.8:
Step 1: install the "brew" command
Step 2: run the following command: brew install --HEAD ideviceinstaller
Step 3 (optional): click Appium/Reset Preferences and then close & open Appium
Good luck.

How to configure the Genymotion emulator to the appium?

Through eclipse I have configured the Genymotion path & also I have downloaded the virtual devices in the Genymotion.
In Appium, those downloaded virtual devices are visible in the"Launch Device" dropdown menu. Then I set the apk path & try to start the Appium 1.3.4.1.
By that time I am getting an error message like
Starting Node Server
usage: main.js [-h] [-v] [--shell]
main.js: error: Unrecognized arguments: Nexus 5 - 4.4.4 - API 19 - 1080x1920.
[--localizable-strings-dir LOCALIZABLESTRINGSDIR] [--app APP]
[--ipa IPA] [-U UDID] [-a ADDRESS] [-p PORT]
[-ca CALLBACKADDRESS] [-cp CALLBACKPORT] [-bp BOOTSTRAPPORT]
[-k] [-r BACKENDRETRIES] [--session-override] [--full-reset]
[--no-reset] [-l] [-lt LAUNCHTIMEOUT] [-g LOG]
[--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] [--native-instruments-lib]
[--app-pkg ANDROIDPACKAGE] [--app-activity ANDROIDACTIVITY]
[--app-wait-package ANDROIDWAITPACKAGE]
[--app-wait-activity ANDROIDWAITACTIVITY]
[--android-coverage ANDROIDCOVERAGE] [--avd AVD]
[--avd-args AVDARGS]
[--device-ready-timeout ANDROIDDEVICEREADYTIMEOUT] [--safari]
[--device-name DEVICENAME] [--platform-name PLATFORMNAME]
[--platform-version PLATFORMVERSION]
[--automation-name AUTOMATIONNAME] [--browser-name BROWSERNAME]
[--default-device] [--force-iphone] [--force-ipad]
[--language LANGUAGE] [--locale LOCALE]
[--calendar-format CALENDARFORMAT] [--orientation ORIENTATION]
[--tracetemplate AUTOMATIONTRACETEMPLATEPATH] [--show-sim-log]
[--show-ios-log] [--nodeconfig NODECONFIG] [-ra ROBOTADDRESS]
[-rp ROBOTPORT] [--selendroid-port SELENDROIDPORT]
[--chromedriver-port CHROMEDRIVERPORT]
[--chromedriver-executable CHROMEDRIVEREXECUTABLE]
[--use-keystore] [--keystore-path KEYSTOREPATH]
[--keystore-password KEYSTOREPASSWORD] [--key-alias KEYALIAS]
[--key-password KEYPASSWORD] [--show-config] [--no-perms-check]
[--command-timeout DEFAULTCOMMANDTIMEOUT] [--keep-keychains]
[--strict-caps] [--isolate-sim-device] [--tmp TMPDIR]
[--trace-dir TRACEDIR] [--intent-action INTENTACTION]
[--intent-category INTENTCATEGORY] [--intent-flags INTENTFLAGS]
[--intent-args OPTIONALINTENTARGUMENTS]
Node Server Process Ended
When I try to run with normal emulator in Android SDK it works well.
But I want to run it with Genymotion emulator. How to do? I'm stuck up here.
My questions are:
Whether the additional emulator will work in appium windows or not?
What I need to give in the "Argument" field under appium?
The following code works for the above question.
static String deviceName = "Google Nexus 5 - 4.4.4 - API 19 - 1080x1920";
public static void main(String[] args) throws InterruptedException, ExecuteException, IOException {
DesiredCapabilities capabilities = new DesiredCapabilities();
DefaultExecutor executor = new DefaultExecutor();
DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler();
CommandLine launchEmul = new CommandLine("C:/Program Files/Genymobile/Genymotion/player");
launchEmul.addArgument("--vm-name");
launchEmul.addArgument("\""+deviceName+"\"");
executor.setExitValue(1);
executor.execute(launchEmul, resultHandler);
Thread.sleep(40);
capabilities.setCapability("deviceName","Google Nexus 5 - 4.4.4 API 19 - 1080x1920");
capabilities.setCapability("platformVersion", "4.3");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("app","D:/SOFTWARES/Apks/GOA.apk");
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
System.out.println("SetUp is successful and Appium Driver is launched successfully");
}
Recently i i've used genymotion and appium and worked fine
1-i've installed appium(i've tried windows and console version succesfully)
2-i've installed genymotion and created a virtual device in it
3-launched virtual device from genymotion
4-in my test, when i defined driver capabilities, i didnt identified a specific virtual device, so, appium try to identify any active device(virtual or not)
try that and let me know if worked to help in anything i could

Can't start tomcat7 debug mode on macOS

Here is a summary:
Objective: Debug a dynamic web application
Environment: MacOS 10.6.8 / Eclipse Helios 20110218-0911 / Tomcat 7
Error: Failed to connect to remote VM. Connection refused.
Story line:
Doing some research on this matter, I found out that the possible problem to this is that I need to start tomcat7 in debug mode which usually acts on port 8000. The command I'm using is ./catalina.sh jpda start which didn't work (it starts tomcat but doesn't start debug mode). So I tried other things like adding this
variables to the system:
declare -x CATALINA_HOME="/Library/Tomcat"
declare -x JPDA_ADDRESS="8000"
declare -x JPDA_TRANSPORT="dt_socket"
and the problem keeps happening.
this is the return of the command: ./catalina.sh jpda start
Using CATALINA_BASE: /Library/Tomcat
Using CATALINA_HOME: /Library/Tomcat
Using CATALINA_TMPDIR: /Library/Tomcat/temp
Using JRE_HOME: /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
Using CLASSPATH: /Library/Tomcat/bin/bootstrap.jar:/Library/Tomcat/bin/tomcat-juli.jar
can anyone help ?
thank you in advance.