Automated tests in iOS with RobotFramework - ios

I'm working in a project of develop a responsive webapp and I'm in charge of creating automated tests in order to test everything in 3 different places, Desktop web, Android web and iOS web with RobotFramework and Appium Library
Desktop and Android it's not the first time I've done it so I quickly configured everything, on the other hand I never tested or even develop anything for iOS (not even used an iPhone irl) and I know from a past experience that XCode has required to send data to the phone, in a similar way to adb for Android.
The real question that my research was not able to respond is: Is a MacOS environment running XCode needed in order to run regression tests? Or is it possible in someway just use Windows, Robot and a physical phone/emulator to run regression tests?
In the case that a MacOS is required do I need Apple Developer ID? (I remember a few years back that it was required for any iOS related development).

In case you're using MacOS and running with Real Device iOS you will require to have Developer Account to provision profile WebDriverAgent or Otherwise you need to have certificate from your developer to install on your Mac. Create Your Apple Dev Account. And if you want try with Windows you can try with Appium Studio.

Yes, you need a MacOS to test with Appium/AppiumLibrary and Robot Framework.
You don't need an Apple Developer ID to test on iOS (only need it when publishing apps to Apple Store).

Related

automate mobile device apps by direct communication to the phone via REST api

I'm currently working on a project that relies heavily on appium / selenium for automation. These frameworks are great for starting out, but the robustness isn't quite there, and requires a lot of extra hardware / software to run the automation. Such as macOS, xcode, adb, appium, selenium, usb connection or connected through WIFI ( what we currently have to use ). There is just a lot of dependencies in this automation stack, and it would be nice to have a cleaner, more reliable, and scalable solution.
So I'm wondering. Does any one know a way to run automation for iOS and Android via REST api using a server that lives directly on the device allowing us to communicate to the device like curl -POST <device_ip>:<port>/session/{sessionId}/openApp.
Think of the WebDriverAgent that Facebook built, but instead of being built with xcodebuild, that Agent just lives on the device. Essentially when you build this framework it starts up that server I'm describing, but its reliant on xcode, and i ultimately would like to remove xcode from having to be in the picture. I know that there are so many issues today I see with people having issues with both the WDA server and xcode. Specially with new versions, and how the WebDriverAgent is now archived by facebook.
Can't we just create an app that can act as the WebDriverServer running at all time, and will just use the same logic as today.. via start session, find elements by Id, click on them, and move on. This would also remove the need to running Appium on your computer, and rely on it to proxy your commands to that WDA server with iOS.
I know android is a much simpler picture, and I'm currently a little more focused on how to solve this with iOS at the moment.
I would appreciate any insight into this issue / question, and if anyone has suggestions on Appium, iOS automation, android automation, or other points that can be made please send me your feedback.
We do run our automation using real devices!
I have use Appium / Selenium to access from Rest API . In my opinion it is easier than building your own.
One of the solution was is we are currently working in a project using Flutter - that still need your Xcode to sign in the dependencies. You will also need to make sure libimobiledevice and ideviceinstaller are installed, and lastly modify Flutter. And we call the real device from rest api . We are currently scaling and monitoring the performance.
Another viable alternative which I can think of, doing it through XCTest will be easier than Appium . Just provide the end point in your app and create a wrapper in XCTest. Call the rest api and run the test in XCTest. It is more stable and faster in long run.
But for bulk of projects , I am still using Appium to test for iOS while we are evaluating this solution.
If you're open to using commercial tools, you can consider using xcuitrunner. It installs a recent version of Appium's fork of WebDriverAgent on your iOS device, launches it (and keeps it alive), and returns you a HTTP endpoint which you can use to interact directly with the WebDriverAgent.
It helps remove a couple of dependencies (such as Xcode), which may be difficult to manage. You'll still need a code signing certificate and provisiong profile from Apple, though.

Can you build a react-native iOS app using WINDOWS?

Can you build for iOS with react-native on Windows?
Or does it require xcode?
If so, any work arounds?
I dont want to work on a mac... or a mac vm.
I think the app you create with react-native will work with iOS but you might just have to develop it without an iOS SDK. (essentially, you can't really see the app in a virtual iOS device whilst developing).
However, i think if you develop the app for android using android studio SDK with react native, the app should also work with iOS as well. It's just that you won't really be able to see the app in development on a virtual iOS device.
Another option is to use expo when using react native. Essentially, it displays your app on your iphone so you can technically do app development whilst viewing the app on an iOS device, but I don't think its that great as you can only see it on your phone, whilst I prefer to use a virtual device on my laptop.
You can view documentation for expo in the react native docs here:
https://facebook.github.io/react-native/docs/getting-started
I'd recommend you to just develop the app for android using the android SDK from Android studio. This also works with expo or react native CLI. Although you may have to develop the app in a virtual android device, I think the app also works with an iOS device (it may just look a little bit different e.g. a button in android will look different to a button on iOS)
Here's a tutorial that really helped me with learning React-Native:
https://www.youtube.com/watch?v=NuZOwsmzcro
Just follow the steps and make sure you install an android SDK. Then once you get to around "9:25", instead of starting up an iOS emulator from an iOS SDK, start up the android one from android SDK, then hit the button "a" to choose android and you're all set!
The short answer is NO. iOS apps need to build on a Mac. However, if you have a cheap old Mac, or even a Mac cloud account, you can effectively do the equivalent while (almost) never touching the Mac. Of course, this assumes that it has been setup up once, and builds via Xcode or Xcode command line. Once that is done, you can automate it so that you're working and testing only on the PC.
For example, I once took over a React Native project where the previous developer did something similar. Because it was a generic interface, he coded on his PC, then tested via the Android emulator without ever testing for iOS. At that point you can simply push code to GitHub (manually, or with something like Fastlane or a user script). Separately, you have a script on that old Mac or online Mac-as-a-service that checks periodically and builds when the code changes. There were some times when the Mac needed special attention, but for the most part, it worked solely on one machine.
Namely, you can not run IOS Simulator on windows. But you can access a virtual IOS machine and run Simulator from windows virtually as a solution..

How do I install the salesforce1 app on my iPad simulator

I'm trying to automate some functionalities of the salesfocre1 app, using Appium.
I have the application on my iPad (real device), but don't know how to connect it with my appium code.
I have the iPad simulator on my Mac but I'm not able to find any installer package files of the Salesforce1 app, to install it on the simulator.
I am not the developer of the above application, so I do not have access to the source code and bundle id, to run it on my XCODE and get it on the simulator.
I've previously done automation on Android using real devices/emulators but it was an easy case where we downloaded the app from play store and were able to test it on the emulator/real device, just wondering how to do the same on iOS. Please help, Thanks in advance.
It simply does not work that easy for iOS.
Since you want to run your Appium tests on real device, you need to build application (.IPA file) from source code or resign the one you have with your Apple developer account.
Then you need to build WebDriverAgent with same provision profile - so that Appium can interact with your application. Only with steps I described it will work.
So in your case:
1. No way to get source code - ask smb to provide developer build, release one in any case may not work with Appium.
2. No need to search - you won't find any installer.
3. No way to get Apple developer account - you have to use 3rd party cloud like saucelabs or browserstack, they will resign IPA file with theirs profiles and you will be able to run tests in cloud

Launching iOS App in UI Testing Mode from Windows 10

It is obvious that we can run iOS App (.ipa, .app) in UITest mode from MacOSX using Xcode or Xcode command line tools.
But I saw some test-automation tools, who can launch App in UITesting mode (Appium Studio, QUAmotion, Ranorex, ..etc) from Windows 10. They are even giving back elements. (which is possible only in UITestMode)
As per my knowledge, UI Testing mode is only supported on MacOSX with Xcode because Xcode has a testManager which it uses to manage the Testcases while running. As for iOS Device attached to windows. LibiMobileDevice with the help of itunes gives functionalities like installing, running, uninstalling etc.
Can any one explain or help me with some library (paid or free )that can help me in Launching iOS app with UI Testing mode on iOS Device from Windows 10 ?
I work for Quamotion, one of the companies that you mentioned. You are right, we can run iOS appliations in UI Test mode on Windows and Linux, just like other vendors such as Ranorex.
If you're still interested, I'd be happy to help you getting started with launching iOS applications in UI testing mode on a real, physical iOS device in Windows 10.
The best way for you to get started would probably to download the latest version of Quamotion, request a 2-week trial license and start one of the tutorials.
For example, we publish a hands-on-lab which shows you, step by step, how you can automate the Acquaint iOS application on a real iPhone from a Windows PC.

Testing Apps on a Device

When using trigger.io toolkit, there's an option that says
"Build and immediately run your app, either locally, on a simulator or on a connected device."
How do you run the app on a Connected Device? I want to see the app on my iPhone and see how it behaves directly. Is this possible?
Thanks
Marc
I'm going to assume you're working on windows with an iPhone that's iOS8 because that's where you currently can't run your app directly on a connected device.
What we did to "fix" this is creating a Development Provisioning Profile with the UDID's of our test devices and added this to config -> tools in the trigger.io toolkit. In the forge you now select package -> iOS giving you a .ipa file. This .ipa can now be installed using iTunes on your test devices.
It's a bit longer than just clicking run on device like you can for Android but at least you don't have to send it to testflight and wait for apple's approval.
This is possible but it depends on your os.
If your on a Mac you can deploy to both ios and android devices from forge, just connect them via usb and build, grated you need to make sure iTunes sees your devices etc.. there are guides on the trigger site
If you are on Windows, you are unfortunate out of luck right now, this used to work but ios8 broke this so if your building on ios7 you could still do it on Windows, otherwise you would need to use testpiolet from apple

Resources