Unable to run test on real device but running on simulator - webdriver

As I am new to real-time device testing, I need your support in resolving an issue which I am facing since long now. I have following issues with iOS devices and simulators:
I am able to run my script in the simulator but not on the real-time device.
Unable to see WebDriverAgentRunner app on the device, however, I have built that app multiple times.
My Scrip is able to interact with Appium, it gets installed also but never gets open (In Eclipse it gets failed with error: No element found)
Please find the attached appium logs and desired capabilities below:
Desired Capabilities:
IOSDriver wd = null;
DesiredCapabilities capabilities = new DesiredCapabilities();
System.out.println(" ");
capabilities.setCapability("appium-version", "1.7.2");
capabilities.setCapability("automationName", "XCUITest");
capabilities.setCapability("platformName", "iOS");
capabilities.setCapability("udid", “UDID”); //6Plus
//capabilities.setCapability("noReset", "true");
capabilities.setCapability("platformVersion", "11.2.6");
capabilities.setCapability("deviceName", "iPhone 6”);
capabilities.setCapability("app",
“<Path of builded Application.app>”);
capabilities.setCapability("bundleID", “<com.bundel id>”);
wd = new IOSDriver(new URL("http://0.0.0.0:4723/wd/hub"),
capabilities);
Also in the simulator, I am able to run only on one device.
Appium Logs Are present in this link

Related

Firebase Realtime Database (NoSQL) stopped responding to the MSXML2.ServerXMLHTTP request on some computers

This code worked successfully (MS JScript):
var pB = new ActiveXObject("MSXML2.ServerXMLHTTP");
var pathModules = 'https://robastik- 2cb02.firebaseio.com/stages/stage4.json';
pB.open("GET", pathModules, false);
pB.send();
It stopped working on some computers (Win10, Win7) last week with timeout error.
From the same computers, the link opens in browser and in curl.
It continues to work successfully on others Win10, Win7.
What reason can be assumed in such a situation?

When is sessionReachabilityDidChange(_:) called on a watch WCSessionDelegate?

Apple's documentation says this in the discussion section of the method description:
This method is called to let the
current process know that its counterpart session’s reachability
changed.
The description of the isReachable property says this: WatchKit
extension. The iOS device is within range, so communication can occur
and the WatchKit extension is running in the foreground, or is running
with a high priority in the background (for example, during a workout
session or when a complication is loading its initial timeline data).
I am assuming this would mean that if the watch moves out of or into range of the iOS device, the WatchKit extension would be launched and the WCSessionDelegate's sessionReachabilityDidChange() method would be called, and the WCSession's isReachable would be true if the iOS device just came into range and false if it just when out of range.
I have not found a way to verify this in xcode. For example I put a log message in sessionReachabilityDidChange(_:) and walked out of range, but xcode simply says the app lost connection with the iphone and can no longer debug it. Can someone verify this or point me to some documentation that better describes this?
I think you cannot verify this in Xcode.
I have an app on iOS and watchOS. To check this kind of situation, I can enable debug alerts on iOS and watchOS. When func sessionReachabilityDidChange(session: WCSession) is triggered, I display a debug alert.
Now, if I run (not under Xcode) my watch extension, and then switch off the paired iPhone, the debug alert is shown on the watch.
This shows that sessionReachabilityDidChange is actually called as expected.
Apparently, under Xcode a connected iOS device is always reachable.
EDIT:
To check the situation when the watch extension is not in foreground, I did the following:
Instead of showing a debug alert, I set now the complication to a unique value that is not possible otherwise. I launched the watch extension and put it into background by showing the watch face with the complication.
When I now switch off the iPhone, the complication is not updated.
This indicates to me that sessionReachabilityDidChange is not called in background.

How to find the current activity of an app in ios

I am using Appium for IOS testing. (java) I want to be able to check the current activity of an app . In the sense when an App switches from clickable to another (say I close the app or switch to another app or open the notifications scroll. I want to be able to detect the page name. To get the current activity name, i use driver.currentActivity(); which is included in the AndroidDriver class.
but There is no direct call for current package in ios, but many suggested that can be found out by looking at the attributes of existing elements in the device screen by calling driver.getPageSource(); how can I achieve this using driver.getPageSource or is there any other way to do it?Any advise on this would be helpful.
You can query current app state, if you have the bundleId of the app then you can
query it's state if its running in background or foreground and it solves your problem.
Map<String, Object> params = new HashMap<>();
params.put("bundleId", "com.myapp");
final int state = (Integer)js.executeScript("mobile: queryAppState", params);
There can be 5 possible state as per the documentation.
0: The current application state cannot be determined/is unknown
1: The application is not running
2: The application is running in the background and is suspended
3: The application is running in the background and is not suspended
4: The application is running in the foreground
Refrences
To see if your app is running, assuming you know the bundleId, you can use the driver directly:
driver.queryAppState('com.apple.Preferences');
It returns the ApplicationState:
NOT_INSTALLED,
NOT_RUNNING,
RUNNING_IN_BACKGROUND_SUSPENDED,
RUNNING_IN_BACKGROUND,
RUNNING_IN_FOREGROUND

How to handle Alert windows in Amazon Device Farm /w Appium

I currently trying out Amazon Device Farm and was able to get a dummy app to work.
However, when I tried getting the actual App I want to get working on Amazon device farm, I'm unable to do so. I'm able to upload the .ipa file, and zip up and upload the py.tests/appium tests with their dependencies, however the tests fail.
What I think might be happening is ADF is not recognizing some of the Desired_capabilities to autodismiss the Alerts for Notifications and GPS coordinates.
My setup is very similar to the setup I used with the dummy app in my initial tests. (these worked with amazon device farm)
https://github.com/dlai0001/appium-spike-running-tests-oncloud
Only thing that is really different is I'm using a real production app, where 2 alert windows popup upon launch. In Appium it will cause the test to crash if I don't have the autodismiss or autoaccept alerts enabled in the desired capabilities.
Harness 00:00.0 1295 Info Starting 00001 with device c00e8ab68437161b894395e438ba8935a672bac0
Harness 00:00.0 1295 Info Using test content version 0.1.0
Harness 00:00.1v1295 Info Using image version ami-778b7c17
I work for the Amazon Device Farm team.
It appears that you are relying on desired capabilities to dismiss the alert window. Currently, Device farm has support for a very limited set of desired capabilities namely app name, package name and osversion. These are available to the application without having the user required to set it.
Appium runs with autoAcceptAlerts=true on Device Farm. This should handle the alert windows, if any, unless it is a system pop up which autoAcceptAlert cannot handle. You should check if your tests can handle the alert windows using autoAcceptAlerts=true with Appium pre launch mode locally.
If it can handle it then device farm should behave the same way.
Sometimes it may be the case that the alert window appears before the appium session is established in which case adding a delay can help.
When you test is locally please use Appium version 1.4.16 since this is the version being used on device farm right now.

How to launch com.android.launcher explicitly?

I have an app that replaces the launcher for a kiosk application. I need to exit to the stock launcher for service mode.
From a dummy test app I can start my own "home" app like this:
Context ctx = getBaseContext();
Intent i = ctx.getPackageManager().getLaunchIntentForPackage("my.application.main");
ctx.startActivity(i);
However, if I replace my.application.main with com.android.launcher, I get back null for the intent. Yet, com.android.launcher is on the system (Nexus 7 tablet). How do I launch com.android.launcher explicitly?

Resources