Friday 14 June 2019

All about adb shell dumpsys

adb shell dumpsys
What is dumpsys?

This was the word always ticking my head whenever I use to talk to vendors. They always needed this one. So I started reading about it and how it benefited them to resolve the android related issues.
dumpsys : It is nothing but a tool which gives the status of services running on device.

Below is the command which shows the list of all services along with the package name
adb shell service list
Output will be as below

adb shell service list
Fig 1 shell service list

So next question is how to identify the services. So below commands give you list of service
adb shell dumpsys -l
Output will be as below

adb shell dumpsys -l
Fig 2 dumpsys -l
There are many filters which you can use for analyzing the dumpsys data

1. dumpsys activity

It shows the list of activities running at that moment on device
adb shell dumpsys  activity
adb shell dumpsys activity
Fig 3 dumpsys activity


2. dumpsys batterystats

This generates the statistical data for battery usage on device.
adb shell dumpsys batterystats

adb shell dumpsys batterystats
Fig 4 dumpsys batterystats

3. dumpsys cpuinfo

This adb command display the CPU information utilized by device
adb shell dumpsys cpuinfo
adb shell dumpsys cpuinfo
Fig 5 dumpsys cpuinfo

Above output you can see that gaana app have utilized 17% of CPU as it was used last.

4. dumpsys wifi

This command displays the status of wifi
adb shell dumpsys wifi
adb shell dumpsys wifi
Fig 6 dumpsys wifi


5. dumpsys meminfo

This command displays the memory information of the device
adb shell dumpsys meminfo
adb shell dumpsys meminfo
Fig 7 dumpsys meminfo

6. dumpsys procstats

This command displays the process stats
adb shell dumpsys procstats --hours 3
adb shell dumpsys procstats
Fig 8 dumpsys procstats
For more on dumpsys refer to https://developer.android.com/studio/command-line/dumpsys

Tuesday 11 June 2019

Troubleshooting - Unable to detect device using adb devices

Unable to detect device using adb devices
There could be many situations where your device connected to system is not detected. Few of the scenarios are explained below. Apart from below scenarios if you face any trouble let us know in comment section.

1. adb devices command doesn't display any result.

For this problem you have to enable the developer option available at Setting -> More settings -> About Phone -> Tap five times on the Software version. A toast message is displayed that "Its in developer mode". Please refer adb devices page for details.
Step 1. Developer Mode selected
Step 2. Developer option is available
Step 3. USB debugging enabled

Once the debugging mode is enabled, now if you fire adb devices command, it will display below as still RSA key is not mapped and device shows us unauthorized



Fig 4. Device Unauthorized



Fig 5. RSA key pop up


Fig 6. Select the option as always



Fig 7. Device detected

2. Device not detected when connected to laptop

There could one reason here that in android 7 onward devices are connected in charge only mode. So you need to select the option from usb charge only to file transfer



 So once the Files mode is selected your device get detected.

3. Device not detected even though its mass storage is detected.

So there are situations in which device internal storage is detected but adb devices command returns nothing. For such scenarios please check below solution. Here we have considered ubuntu OS.

Step 1 : adb devices
This returns nothing

Step 2: lsusb
Once you run this command below result is displayed


Step 3: Check whether adb_usb.ini file exist on your system. In my case it was not available so we will install it with below commands
a. mkdir --parent $HOME/.android
b. wget -O $HOME/.android/adb_usb.ini https://raw.githubusercontent.com/NicolasBernaerts/ubuntu-scripts/master/android/adb_usb.ini
c. vi adb_usb.ini
d. add the device code here and save
e. To save press Esc : wq

Step 4 : Once adb_usb.ini file is downloaded, add the code in the file and save


Fig 1. Downloaded adb_usb.ini


Fig 2. Added the code for mediatek device

Step 5 : Now run the adb devices command. Your device will be detected.

Why this happens?

The android sdk have qualcomm based codes already in the adb_usb.ini file, but for few other chipset it is not available then we have to add manually and save.

Tuesday 4 June 2019

ADB Network Commands

1. adb shell netstat

In computing, netstat (network statistics) is a command-line network utility tool that displays network connections for the Transmission Control Protocol (both incoming and outgoing).
adb netstat command is used for network statistics . This command is usually required to analyse the network statistics for an android device. Below pic shows the actual output of the command

netstat

2. adb shell ping 

PING command returns the network response if the device is connected to INTERNET. Ping command can be used with below options

ping [-c count]
        [-i interval]
        [-I interface]
        [-m mark]
        [-M pmtudisc_option]
        [-l preload]
        [-p pattern]
        [-Q tos]
        [-s packetsize]
        [-S sndbuf]
        [-t ttl]
        [-T timestamp_option]
        [-w deadline]
        [-W timeout]

The output of the adb shell ping command will be as below

ping

Ctrl+c is used to stop the ping command. You can also give give limited lines to be displayed on screen as a result of ping command.

adb shell ping www.facebook.com -c 4
3.  adb shell netcfg

adb shell netcfg command is used to show, manipulate routing, configure and manage network connections via profiles. Below is the result of netcfg command

netcfg
4. adb shell ip

adb shell ip command show, manipulate routing, devices, policy routing and tunnels

ip [OPTIONS ] OBJECT
OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |tunnel | tuntap | maddr | mroute | mrule | monitor| xfrm |netns | l2tp }

OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |-f[amily] { inet | inet6 | ipx | dnet | link } |-l[oops] { maximum-addr-flush-attempts } |-o[neline] | -t[imestamp] | -b[atch] [filename] |-rc[vbuf] [size]}

Example: adb shell ip -f inet addr show wlan0
                (show WiFi IP Address)





Adb over Wi-Fi

ADB Network Command
Sometimes its required to do the testing without using usb cable. That means we don't have to keep the device in charging mode but we want to run our scripts. In this case we can use adb over Wi-Fi. Lets see in detail, what is adb over Wi-Fi?

Step 1:
Connect device to system using usb

Step 2:
adb device
This will give you the list of devices connected to system
Result - List of devices attached
            ######## device

Step 3:
adb tcpip 5555
Result - restarting in TCP mode port: 5555

Step 4:
Find out the IP address of the device. Settings -> About -> Status -> IP address

Step 5:
adb connect #.#.#.#
Result - connected to #.#.#.#:5555

Step 6:
Now remove the usb cable and run below command to confirm whether the device is still connected or not

adb devices
Result - List of devices attached
#.#.#.#:5555 device

Monday 6 May 2019

Mobile UI Automation Using Python uiautomator Module

Mobile UI Automation Using Python uiautomator Module

Let's see how we can automate mobile UI using python uiautomator module. It works on Android 4.1 + .
Install python 2.7 on your system.First you need to install uiautomator package


1. How to Automate call functionality using uiautomator.

This is how you identify the element from uiautomator. You have to pick the unique properties like className,packageName,Text,resourceId etc. by using uiautomator.


from uiautomator import device as d
from uiautomator import Device
from time import sleep
import os
def VoLTE_call():
  print("Inside Call Method.")
  call = d(className='android.widget.TextView',
                     packageName='com.cyanogenmod.trebuchet',
                     text ='Phone').click()
  sleep(2)
  dialer = d(className='android.widget.ImageButton',
           packageName='com.android.dialer',
           resourceId='com.android.dialer:id/
                       floating_action_button').click()
  sleep(1)
  dialling_page = d(className='android.widget.EditText',
                    packageName='com.android.dialer',
                    resourceId='com.android.dialer:id/digits')
                                    .set_text(number)
  sleep(1)
  press_call_button = d(className='android.widget.ImageButton',
                    packageName='com.android.dialer',
                    resourceId='com.android.dialer:id/
                                dialpad_floating_action_button').click()
  sleep(5)
  #hold call
  hold = d(className='android.widget.ImageButton',
                    packageName='com.android.dialer',
                    resourceId='com.android.dialer:id/holdButton')
                             .click()
  sleep(5)
  #unhold Call
  unhold = d(className='android.widget.ImageButton',
                    packageName='com.android.dialer',
                    resourceId='com.android.dialer:id/holdButton')
                             .click()
  sleep(5)
  # mute Call
  mute= d(className='android.widget.ImageButton',
             packageName='com.android.dialer',
             resourceId='com.android.dialer:id/muteButton').click()
  sleep(5)

  #unmute call  
  unmute= d(className='android.widget.ImageButton',
             packageName='com.android.dialer',
             resourceId='com.android.dialer:id/muteButton').click()
  sleep(5)
  #speaker on  
  speaker_on= d(className='android.widget.ImageButton',
           packageName='com.android.dialer',
           resourceId='com.android.dialer:id/audioButton').click()
  sleep(5)
  # speaker off  
  speaker_off = d(className='android.widget.ImageButton',
             packageName='com.android.dialer',
             resourceId='com.android.dialer:id/audioButton').click()
  sleep(5)
  press_endcall_button = d(className='android.widget.ImageButton',
                        packageName='com.android.dialer',
                        resourceId='com.android.dialer:id/
                              floating_end_call_action_button').click()
  d.press.home()
#Call The main Method
VoLTE_call()
print(""Your test is completed...")


Friday 3 May 2019

How to Capture screenshot and video using adb commands

adb command There are multiple situations where you want to capture the screenshots or video and store in a folder all programmatically. This is simple and one line adb command that can be used to capture the screenshot and video.

Capture Screenshot:

Please find the below steps to capture the screenshot of an android device

1. Connect device to laptop. To confirm whether device is connected or not, run below command
 2. Screencap is the adb command which is used for capturing the screenshots



3. Once the screenshot is captured, its time to pull out from device to laptop.



The image is pulled on your system.

Capture Video:

Please find the below steps to capture the video of an android device. This is generally required when you want to give steps for reproducing certain issues.

1. Connect device to laptop. To confirm whether device is connected or not, run below command


2. Screenrecord is the adb command which is used for capturing the screenshots


3. Once the screen activities are recorded press ctrl+C to stop the recording.

The video which was captured is stored on sdcard. To pull out the video from sdcard please run below command

Here is simple program that depicts how programatically you can use above two commands
Same way we can also write script for video recording.


Friday 26 April 2019

Locating UI Element Using uiautomator

How to use uiautomator for inspecting UI elements on mobile?

So there are multiple ways available by which you can identify the element on mobile. some of them as below. So here I am taking an example of Hotstar app for illustrating the various ways of element identification. Also I am using python as my scripting language.

1. By ID

This is the most efficient way to locate an element as IDs are unique. This is the most prefered way to identify the elements of android app. 


So for this the code will be as below.
app_opened=d(packageName='in.startv.hotstar', resourceId='in.startv.hotstar:id/iv_ad_background').wait.exists(timeout=20000)  
You can see that I have highlighted the portion where it depicts that element is identified by ID.

2. By className:

A class contains many elements. So you have to little careful while using element identification using class name because if an element has many classes then it will match against each of them. 



So for this the code will be as below.
home_page_click=d(packageName='in.startv.hotstar', className='android.support.v4.view.ViewPager',resourceId='in.startv.hotstar:id/pager').click()

3. By Name:

It is possible to locate the element by name but they should be unique.



So for this the code will be as below.
dream11=d(packageName='in.startv.hotstar',resourceId='in.startv.hotstar:id/tv_header',  text='Dream11').click()  

4. By Xpath:

The very last option to be used for identifying the elements. You end up in many situations that you don't have option but to use xpath for identifying the elements.There are two types of xpath, relative xpath and absolute xpath. It is suggested to use relative xpath because absolute xpath uses indexes and if there is any change in the code, it will result in the failure of test scripts which is trying to identify the UI element.

So for this the code will be as below.
dream11 = d(By.xpath("//*[@text = 'Dream11']"))



Different actions performed using uiautomator or Appium

Perform Actions

Once the element is identified, you want to perform different actions just like a normal user does on mobile.

So different actions which you can be performed are:

1. click():
     Clicks the center of the visible UI element

2. dragTo():
    Drags this object to arbitrary coordinates.

3.setText():
   Allows you to set a text in editable text field.

4. ClearTextField():
    This method is used to clear the text field if any text is already available.

5. swipeUp():
    Performs the swipe up action on the UI element.

6. swipeLeft():
    Perform the swipe left action on the UI element.

7. swipeRight():
    Perform the swipe right action on the UI element.

8. swipeDown():
    Perform the swipe down action on the UI element.

Thursday 25 April 2019

Ways to identify mobile app elements

How to identify the elements on mobile UI

You can identify element using either uiautomator viewer or using appium. Let me show you how you can use the uiautomator for identifying the UI elements and later on I will explain element identification using appium

Element identification using uiautomator viewer

It is convenient GUI Tool to scan and identify the UI elements of the app which is currently displayed on the device under test. uiautomator viewer is located at <android-sdk>/tools/bin




Double click on the batch file and you will be able see the uiautomatorviewer. Once you have clicked on the uiautomatorviewer, it will display a window which would be like as below


To check the elements on UI , you need to click on third element from element and then below screen will appear on uiautomatorviewer (Make sure you have connected a mobile device to laptop)

Wednesday 8 August 2018

Why Mobile Automation Required?



             To compete in this very competitive world of smartphones we have to deliver a quality product and need more revenue in small tenure then it is necessary for an organisation to go for Mobile automation testing. Mobile automation will provide the various solutions, which helps you to verify and validate the overall functionality of the Mobile apps(native as well hybrid apps). Automation can be done to achieve better coverage in less duration with better test results.



Types of Apps available for Smartphones:
There are 3 types of apps available in smartphones. Below are the types
  1. Native App
  2.  Hybrid App
  3. Web Apps

How to Automate??

There are so many tools available for automation testing. Some are paid and some are open source.Depending on the requirement of the project one should decide the automation tool for automation.

Here are some examples of tools:
  1. Appium
  2. Robotium
  3. Selendroid(for Android)
  4. UI Automator
  5. Ranorex
  6. MonkeyRunner
  7. SeeTest


Feature Posts

Python Appium - Step by step procedure for capturing screenshot

 Why To capture screenshot? It is as important as your logs. If there is any failure for any test scenario, we can provide screenshot for th...