""" Controller Library 1. controller_data/sdk_base_url 2. login credentials """ import datetime import sys import os import time import warnings from _pytest.outcomes import xfail import urllib3 from perfecto.model.model import Job, Project from perfecto import (PerfectoExecutionContext, PerfectoReportiumClient,TestContext, TestResultFactory) import pytest import logging import re from selenium.common.exceptions import NoSuchElementException, TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from appium.webdriver.common.mobileby import MobileBy from selenium.webdriver.support import expected_conditions as EC from appium import webdriver import allure sys.path.append( os.path.dirname( os.path.realpath(__file__) ) ) if "tests" not in sys.path: sys.path.append(f'../../tests') try: from configparser import ConfigParser except ImportError: from ConfigParser import ConfigParser # ver. < 3.0 def openApp(appName, setup_perfectoMobile): print("Refreshing App: " + appName) setup_perfectoMobile[1].step_start("Opening App: " + appName) params = {'identifier': appName} #Open/Close/Open Action is performed to ensure the app is back to its Original Settings setup_perfectoMobile[0].execute_script('mobile:application:open', params) setup_perfectoMobile[0].execute_script('mobile:application:close', params) setup_perfectoMobile[0].execute_script('mobile:application:open', params) def closeApp(appName, setup_perfectoMobile): print("Closing App.." + appName) setup_perfectoMobile[1].step_start("Closing App: " + appName) params = {'identifier': appName} setup_perfectoMobile[0].execute_script('mobile:application:close', params) print("Closed App") def scrollDown(setup_perfectoMobile): print("Scroll Down") setup_perfectoMobile[1].step_start("Scroll Down") params2 = {} params2["start"] = "50%,90%" params2["end"] = "50%,20%" params2["duration"] = "4" # time.sleep(2) setup_perfectoMobile[0].execute_script('mobile:touch:swipe', params2) time.sleep(3) def getDeviceID(setup_perfectoMobile): report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Get DeviceID") params = {'property': 'deviceId'} deviceID = driver.execute_script('mobile:handset:info', params) print("DeviceID: " + deviceID) return deviceID def getDeviceModelName(setup_perfectoMobile): report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Device Model Name") params = {'property': 'model'} deviceModel = driver.execute_script('mobile:handset:info', params) print("ModelName: " + deviceModel) return deviceModel def set_APconnMobileDevice_android(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Select Wifi/AccessPoint Connection") print("-------------------------------------") print("Verifying Wifi/AP Connection Details....") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) #Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print ("Selected Device Model: " + deviceModelName) if deviceModelName!=("Pixel 4"): report.step_start("Set Wifi Network to " + WifiName) try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") try: print("Get Connected Wifi Name if any") report.step_start("Get Connected Wifi Name if any") try: driver.implicitly_wait(20) WifiNameElement = driver.find_element_by_xpath("//*[@resource-id='android:id/summary']") Wifi_AP_Name = WifiNameElement.text print("Current Wifi Status Name: " + Wifi_AP_Name) except NoSuchElementException: report.step_start("Checking Wifi Radio Button Status") try: driver.implicitly_wait(5) WifiRadioBtnConnections = driver.find_element_by_xpath("//*[@resource-id='android:id/switch_widget' and @content-desc='Wi-Fi' and @text='Off']") report.step_start("Wifi Radio Button Disabled, Enabling Radio Button..") print("Wifi Radio Button Disabled, Enabling Radio Button..") WifiRadioBtnConnections.click() except NoSuchElementException: Wifi_AP_Name="Null" driver.implicitly_wait(25) report.step_start("Wifi Radio Button Already Enabled") print("Wifi Radio Button Already Enabled") except NoSuchElementException: Wifi_AP_Name="Null" print("Device not connected to any Wifi") report.step_start("Clicking Wi-Fi") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() Wifi_AP_Name="" if Wifi_AP_Name.__eq__(WifiName): print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']") print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) else: #print("Set Wifi Radio Button to enabled") #try: # report.step_start("Set Wifi Radio Button to enabled") # wifiRadioBtn = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget' and @text='Wi-Fi, Off']") # wifiRadioBtn.click() # except NoSuchElementException: # report.step_start("Set Wifi Radio Button Already enabled") # print("Radio button Already Enabled") print("Selecting Wifi: " + WifiName) try: report.step_start("Selecting Wifi: " + WifiName) wifiSelectionElement = WebDriverWait(driver, 35).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='"+ WifiName + "']"))) wifiSelectionElement.click() except Exception as e: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") request.config.cache.set(key="SelectingWifiFailed", value=str(e)) assert False #Set password if Needed try: report.step_start("Set Wifi Password") wifiPasswordElement = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/edittext']") wifiPasswordElement.send_keys(WifiPass) except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") try: report.step_start("Click Connect Button") joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']") joinBTNElement.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) else: report.step_start("Set Wifi Network to Pixel" + WifiName) try: print("Click Network & Internet") report.step_start("Click Network & Internet") connElement = driver.find_element_by_xpath("//*[@text='Network & internet']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") try: print("Get Connected Wifi Name if any") report.step_start("Get Connected Wifi Name if any") WifiNameElement = WebDriverWait(driver, 35).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/title' and @text='Wi‑Fi']/parent::*/android.widget.TextView[@resource-id='android:id/summary']"))) Wifi_AP_Name = WifiNameElement.text print("Current Wifi Status Name: " + Wifi_AP_Name) WifiNameElement.click() except NoSuchElementException: Wifi_AP_Name="Null" print("Device not connected to any Wifi") if Wifi_AP_Name.__eq__(WifiName): print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']") print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) else: print("Set Wifi Radio Button to enabled") try: report.step_start("Set Wifi Radio Button to enabled") wifiRadioBtn = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget' and @text='OFF']") wifiRadioBtn.click() except NoSuchElementException: report.step_start("Set Wifi Radio Button Already enabled") print("Radio button Already Enabled") print("Selecting Wifi: " + WifiName) try: report.step_start("Selecting Wifi: " + WifiName) wifiSelectionElement = WebDriverWait(driver, 35).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='"+ WifiName + "']"))) wifiSelectionElement.click() except NoSuchElementException: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") #Set password if Needed try: report.step_start("Set Wifi Password") wifiPasswordElement = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/password']") wifiPasswordElement.send_keys(WifiPass) except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") try: report.step_start("Click Connect Button") joinBTNElement = driver.find_element_by_xpath("//*[@resource-id='android:id/button1' and @text='Connect']") joinBTNElement.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 35).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) closeApp(connData["appPackage-android"], setup_perfectoMobile) def ForgetWifiConnection(request, setup_perfectoMobile, WifiName, connData): print("\n-----------------------------") print("Forget Wifi/AP Connection") print("-----------------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') contexts = driver.contexts #print(contexts) #Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print ("Selected Device Model: " + deviceModelName) if deviceModelName!=("Pixel 4"): report.step_start("Forget Existing Wifi" + WifiName) try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") try: print("Connected Wifi Name if any") report.step_start("Get Connected Wifi Name if any") WifiNameElement = driver.find_element_by_xpath("//*[@resource-id='android:id/summary']") Wifi_AP_Name = WifiNameElement.text print("Connected to Wifi: " + Wifi_AP_Name) except NoSuchElementException: Wifi_AP_Name="Null" print("Device not connected to any Wifi") report.step_start("Clicking Wi-Fi") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() if Wifi_AP_Name.__eq__(WifiName): report.step_start("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) print("Load Wifi Details Page") try: report.step_start("Load Wifi Details Page") WifiInternetDetails = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/wifi_details']") WifiInternetDetails.click() except NoSuchElementException: print("Wifi Connection Error: " + WifiName) print("Forget Wifi Network") try: report.step_start("Forget Wifi Network") WifiForget= driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/smallLabel' and @text='Forget']") WifiForget.click() except NoSuchElementException: print("Wifi Connection Error: " + WifiName) print("Verify if wifi is disconnected from: " + WifiName) try: report.step_start("Verify if wifi is disconnected from: " + WifiName) WifiDisconnect = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']") print("Wifi Not disconnected, check xpath for: " + WifiName) assert False except Exception as e: assert True print("Wifi Disconnected Successfully: " + WifiName) else: print("Wifi Does not Match with Wifi: " + WifiName) report.step_start("Wifi Does not Match with Wifi: " + WifiName) report.step_start("Probably wifi auto connected to another network") try: report.step_start("Wifi Details Page") WifiInternetDetails = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/wifi_details']") WifiInternetDetails.click() except NoSuchElementException: print("Wifi Connection Error: " + WifiName) try: report.step_start("Forget Wifi Network") WifiForget= driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/smallLabel' and @text='Forget']") WifiForget.click() except NoSuchElementException: print("Wifi Connection Error: " + WifiName) print("Verify if wifi is disconnected from: " + WifiName) try: report.step_start("Verify if wifi is disconnected from: " + WifiName) #WifiForget= driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']") print("Wifi Not disconnected, check xpath for: " + WifiName) WifiForget = WebDriverWait(driver, 20).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) except Exception as e: assert True print("Wifi Disconnected Successfully: " + WifiName) else: #print("Pixel Custom Code") report.step_start("Forget Wifi Network on Pixel" + WifiName) try: print("Click Network & Internet") report.step_start("Click Network & Internet") connElement = driver.find_element_by_xpath("//*[@text='Network & internet']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") try: print("Get Connected Wifi Name if any") report.step_start("Get Connected Wifi Name if any") WifiNameElement = WebDriverWait(driver, 35).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/title' and @text='Wi‑Fi']/parent::*/android.widget.TextView[@resource-id='android:id/summary']"))) Wifi_AP_Name = WifiNameElement.text print("Current Wifi Status Name: " + Wifi_AP_Name) WifiNameElement.click() except NoSuchElementException: Wifi_AP_Name="Null" print("Device not connected to any Wifi") #print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) try: report.step_start("Wifi More information") WifiInternetMoreSettings = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/settings_button_no_background']") WifiInternetMoreSettings.click() except NoSuchElementException: print("Wifi Not Connected to any Wifi Error: " + WifiName) try: report.step_start("Forget Wifi Network") WifiInternetMoreSettings = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/button1' and @text='Forget']") WifiInternetMoreSettings.click() except NoSuchElementException: print("Wifi Connection Error: " + WifiName) try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']") print("Forgot Wifi Error, check xpath") except Exception as e: print("Wifi Disconnected Successfully: " + WifiName) closeApp(connData["appPackage-android"], setup_perfectoMobile) def Toggle_AirplaneMode_android(request, setup_perfectoMobile, connData): print("\n-----------------------") print("Toggle Airplane Mode") print("-----------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') contexts = driver.contexts #print(contexts) #Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print ("Selected Device Model: " + deviceModelName) airplaneFlag = False report.step_start("Click Connections") try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") try: report.step_start("Toggle Airplane Mode to On") print("Toggle Airplane Mode to On") ToggleAirplanEle = driver.find_element_by_xpath("//*[@content-desc='Airplane mode' and @text='Off']") ToggleAirplanEle.click() airplaneFlag = True print("Toggle Airplane Mode to Off") ToggleAirplanEle2 = driver.find_element_by_xpath("//*[@content-desc='Airplane mode' and @text='On']") ToggleAirplanEle2.click() except NoSuchElementException: print("Toggle Airplane Exception, Airplane mode may be on Already.") try: print("Checking to see if Airplane is already enabled") report.step_start("Checking to see if Airplane is already enabled") connElement = driver.find_element_by_xpath("//*[@content-desc='Airplane mode' and @text='On']") airplaneFlag = True report.step_start("Disable Airplane Mode") connElement.click() except NoSuchElementException: print("Airplane Mode is On & Off status elements Error, please check xpath or if the Page Loaded") return airplaneFlag def Toggle_WifiMode_android(request, setup_perfectoMobile, WifiName, connData): print("\n-----------------------") print("Toggle Wifi Mode") print("-----------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') contexts = driver.contexts #print(contexts) #Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print ("Selected Device Model: " + deviceModelName) WifiFlag = False try: report.step_start("Click Connections") print("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") try: print("Get Connected Wifi Name if any") report.step_start("Get Connected Wifi Name if any") WifiNameElement = driver.find_element_by_xpath("//*[@resource-id='android:id/summary']") Wifi_AP_Name = WifiNameElement.text print("Current Wifi Status Name: " + Wifi_AP_Name) except NoSuchElementException: Wifi_AP_Name="Null" print("Device not connected to any Wifi") print("Current Selected Wifi: " + Wifi_AP_Name) report.step_start("Current Selected Wifi: " + Wifi_AP_Name) try: report.step_start("Disable Wifi Radio Button") print("Disable Wifi Radio Button") connElement = driver.find_element_by_xpath("//*[@content-desc='Wi-Fi' and @text='On']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Wifi Radio Button") try: print("Get Connected Wifi Name if any after Wifi Radio is disabled") report.step_start("Get Connected Wifi Name if any after Wifi Radio is disabled") WifiNameElement = driver.find_element_by_xpath("//*[@resource-id='android:id/summary']") Wifi_AP_Name2 = WifiNameElement.text print("Device Connected to Wifi: " + Wifi_AP_Name2) except NoSuchElementException: Wifi_AP_Name2="Null" print("Device connected to Wifi: " + Wifi_AP_Name2) try: report.step_start("Enable Wifi Radio Button") print("Enable Wifi Radio Button") wifiRadioBTN_Off = driver.find_element_by_xpath("//*[@content-desc='Wi-Fi' and @text='Off']") wifiRadioBTN_Off.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Wifi Radio Button") try: print("Get Connected Wifi Name if any after Wifi Radio is Enabled") report.step_start("Get Connected Wifi Name if any after Wifi Radio is disabled") WifiNameElement3 = WebDriverWait(driver, 35).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary']"))) Wifi_AP_Name3 = WifiNameElement3.text print("Current Wifi Status Name: " + Wifi_AP_Name3) except NoSuchElementException and TimeoutException: Wifi_AP_Name3="Null" print("Device did not connect back to Wifi: " + WifiName) if Wifi_AP_Name3.__eq__(WifiName): WifiFlag = True else: WifiFlag = False return WifiFlag def verifyUploadDownloadSpeed_android(request, setup_perfectoMobile, get_APToMobileDevice_data): print("\n-------------------------------------") print("Verify Upload & Download Speed") print("-------------------------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] connData = get_APToMobileDevice_data currentResult=False driver.switch_to.context('WEBVIEW_1') try: print("Launching Chrome") report.step_start("Google Home Page") driver.get(connData["webURL"]) print("Enter Search Text") elementFindTxt = driver.find_element_by_xpath(connData["lblSearch"]) elementFindTxt.send_keys("Internet Speed Test") except Exception as e: print("Launching Safari Failed") print (e) # allure.attach(name="Speed Test logs: ", body=str("Launching Safari Failed")) # allure.attach(name="Speed Test logs: ", body=str("Error log: " + e)) try: print("Click Search Button") report.step_start("Click Search Button") time.sleep(2) driver.implicitly_wait(2) elelSearch = driver.find_element_by_xpath("//*[@class='aajZCb']//*[@class='nz2CCf']/li[1]/div[2]") elelSearch.click() except: try: time.sleep(2) driver.implicitly_wait(2) elelSearch = driver.find_element_by_xpath("//*[@class='aajZCb']//*[@class='nz2CCf']/li[1]/div[2]") elelSearch.click() except: print("Search Drop Down not active...") return False try: print("Click Run Speed Test Button...") report.step_start("Click Run Speed Test Button") driver.find_element_by_xpath(connData["BtnRunSpeedTest"]).click() except NoSuchElementException: print("Error in speed test element ", NoSuchElementException) # allure.attach(name="Speed Test logs: ", body=str("Search Run Speed Test not active..." + NoSuchElementException)) return False #Get upload/Download Speed try: print("Get Download Speed") report.step_start("Get upload/Download Speed") time.sleep(60) downloadMbps = driver.find_element_by_xpath(connData["downloadMbps"]) downloadSpeed = downloadMbps.text print("Download: " + downloadSpeed + " Mbps") print("Get Upload Speed") report.step_start("Get Upload Speed") UploadMbps = driver.find_element_by_xpath(connData["UploadMbps"]) uploadSpeed = UploadMbps.text print("Upload: " + uploadSpeed + " Mbps") allure.attach(name="Speed Test logs: ", body=str("Upload: " + uploadSpeed + " Mbps" + " Download: " + downloadSpeed + " Mbps")) print("Access Point Verification Completed Successfully") currentResult = True except NoSuchElementException: print("Access Point Verification NOT Completed, checking Connection....") return currentResult def downloadInstallOpenRoamingProfile(request, profileDownloadURL, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Installing Android Profile ") print("-------------------------------------") OpenRoamingWifiName = "" report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] driver.switch_to.context('WEBVIEW_1') print("Launching Safari with OpenRoaming Profile") report.step_start("Open Roaming Download Page") driver.get(profileDownloadURL) try: print("Accept Popup") report.step_start("Accept Popup") driver.switch_to.context('NATIVE_APP') WebDriverWait(driver, 40).until(EC.alert_is_present(), 'Time out confirmation popup to appear') alert = driver.switch_to.alert alert.accept() print("Alert Accepted") except TimeoutException: print("no alert") #//*[@resource-id="android:id/button1"] #Open Settings Application #openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) def deleteOpenRoamingInstalledProfile(request, profileName, setup_perfectoMobile, connData): print("\n-----------------------------") print("Delete Open Roaming Profile") print("-----------------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') contexts = driver.contexts #Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) if deviceModelName!=("Pixel 4"): #Not a pixel Device print ("Selected Device Model: " + deviceModelName) report.step_start("Forget Profile: " + profileName) # three dotss #//*[@resource-id='com.android.settings:id/round_corner'] try: print("Click Connections") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") try: report.step_start("Clicking Wi-Fi") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() except NoSuchElementException: print("Exception: Clicking Wi-Fi - Update/check Xpath for Click Wifi Connection ") try: print ("Click Advanced Menu 3 Dot") report.step_start("Click Advanced Menu 3 Dot") ThreeDotMenuBtn = driver.find_element_by_xpath("//*[@content-desc='More options']") ThreeDotMenuBtn.click() except NoSuchElementException: print("Exception: Click Advanced Menu Not Loaded") # Click Advanced # //*[@text='Advanced'] try: print ("Click Advanced") report.step_start("Click Advanced") AdvBtn = driver.find_element_by_xpath("//*[@text='Advanced']") AdvBtn.click() except NoSuchElementException: print("Exception: Click Advanced") #Scroll Down scrollDown(setup_perfectoMobile) #Click HotSpot #//*[@text="Hotspot 2.0"] try: print ("Click HotSpot") report.step_start("Click HotSpot") HotSpotBtn = driver.find_element_by_xpath("//*[@text='Hotspot 2.0']") HotSpotBtn.click() except NoSuchElementException: print("Exception: Click HotSpot") #Click Ameriband #//*[@text="Ameriband"] try: print ("Click Ameriband") report.step_start("Click Ameriband") AmeribandXpath = "//*[@text='Ameriband']" AmeribandBtn = WebDriverWait(driver, 25).until(EC.presence_of_element_located((MobileBy.XPATH, AmeribandXpath))) AmeribandBtn.click() except NoSuchElementException and TimeoutException and Exception: report.step_start("Exception: Profile Don't Exist") print("Exception: Profile Don't Exist") #Click Forget #//*[@resource-id="com.android.settings:id/icon"] try: print ("Click Forget") report.step_start("Click Forget") ForgetBTN = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/icon']") ForgetBTN.click() except NoSuchElementException: print("Exception: Click Forget") #Click Forget Confirm #//*[@resource-id="android:id/button1"] try: print ("Click Forget Confirm") report.step_start("Click Forget Confirm") ForgetConfirm = driver.find_element_by_xpath("//*[@resource-id='android:id/button1']") ForgetConfirm.click() except NoSuchElementException: print("Exception: Click Forget Confirm") else: #Pixel Device print ("Pixel Device Not supported: " + deviceModelName) report.step_start("Pixel Device Not supported: ") assert False closeApp(connData["appPackage-android"], setup_perfectoMobile) def verify_APconnMobileDevice_Android(request, profileNameSSID, setup_perfectoMobile, connData): print("\n-----------------------------") print("Verify Connected Network ") print("-----------------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') contexts = driver.contexts #Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) if deviceModelName!=("Pixel 4"): #Not a pixel Device print ("Selected Device Model: " + deviceModelName) report.step_start("Click Connections") try: print("Click Connections") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") print("Clicking Wi-Fi") report.step_start("Clicking Wi-Fi") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() try: print("Verify if Wifi is Connected to: " + profileNameSSID) report.step_start("Verify if Wifi is Connected: " + profileNameSSID) #WifiInternetErrMsg = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + profileNameSSID + "']") WifiInternetErrMsg = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='Ameriband']") print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + profileNameSSID) report.step_start("Wifi Connection Error: " + profileNameSSID) assert False else: #Pixel Device print ("Pixel Device Not supported: " + deviceModelName) report.step_start("Pixel Device Not supported: ") assert False closeApp(connData["appPackage-android"], setup_perfectoMobile) # Cache_clear Function def cache_clear_android(request, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Select Cache Clear") print("-------------------------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) # Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print("Selected Device Model: " + deviceModelName) if deviceModelName != ("Pixel 4" and "Galaxy S9"): try: print("Clicking Search button") report.step_start("Click Search") conn_ele = driver.find_element_by_xpath("//*[@content-desc='Search']") conn_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Search") try: driver.implicitly_wait(30) print("Entering Chrome in Search") report.step_start("Entering text Chrome") search_ele = driver.find_element_by_xpath("//*[@resource-id='com.android.settings.intelligence:id/search_src_text']") search_ele.send_keys("chrome") except Exception as e: print("Exception: Entering chrome failed") print(e) try: driver.implicitly_wait(40) print("Clicking Chrome App Info") report.step_start("Click Chrome App Info") chrome_ele = driver.find_element_by_xpath("//*[@text='Chrome']") chrome_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Chrome") # Scroll Down scrollDown(setup_perfectoMobile) try: driver.implicitly_wait(30) print("Clicking Storage") report.step_start("Click Storage") store_ele = driver.find_element_by_xpath("//*[@text='Storage']") store_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Storage") try: driver.implicitly_wait(30) print("Clicking Clear Cache") report.step_start("Click Clear Cache") clear_ele = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/button2']") clear_ele.click() print("Cleared Cache") except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Clearcache") try: driver.implicitly_wait(30) print("Checking if cache cleared or not with 0B") report.step_start("Checking if cache cleared or not with 0B") check_ele = driver.find_element_by_xpath("//*[@text='0 B']") if check_ele is not None: return True else: return False except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Checking cache clear") elif deviceModelName == ("Pixel 4"): # Pixel cache clear code try: print("Clicking Search button") report.step_start("Click Search") conn_ele = driver.find_element_by_xpath("//*[@class='android.widget.ImageButton']") conn_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Search") try: driver.implicitly_wait(30) print("Entering Chrome in Search") report.step_start("Entering text Chrome") search_ele = driver.find_element_by_xpath("//*[@resource-id='android:id/search_src_text']") search_ele.send_keys("chrome") except Exception as e: print("Exception: Entering chrome failed") print(e) try: driver.implicitly_wait(35) print("Clicking Chrome App Info") report.step_start("Click Chrome App Info") chrom_ele = driver.find_element_by_xpath("//*[@text='Chrome']") chrom_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Chrome") try: driver.implicitly_wait(30) print("Clicking Storage & cache") report.step_start("Click Storage & cache") store_ele = driver.find_element_by_xpath("//*[@text='Storage & cache']") store_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Storage & cache") try: driver.implicitly_wait(30) print("Clicking Clear Cache") report.step_start("Click Clear Cache") clear_ele = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/button2']") clear_ele.click() print("Cleared cache") except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Clearcache") try: driver.implicitly_wait(30) print("Checking if cache cleared or not with 0B") report.step_start("Checking if cache cleared or not with 0B") store_ele = driver.find_element_by_xpath("//*[@text='0 B']") if store_ele is not None: return True else: return False except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Checking cache clear") else: try: print("Clicking Search button") report.step_start("Click Search") conn_ele = driver.find_element_by_xpath("//*[@content-desc='Search settings']") conn_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Search") try: driver.implicitly_wait(30) print("Entering Chrome in Search") report.step_start("Entering text Chrome") search_ele = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings.intelligence:id/search_src_text']") search_ele.send_keys("chrome") except Exception as e: print("Exception: Entering chrome failed") print(e) try: driver.implicitly_wait(40) print("Clicking Chrome App Info") report.step_start("Click Chrome App Info") chrome_ele = driver.find_element_by_xpath("//*[@text='Chrome']") chrome_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Chrome") # Scroll Down scrollDown(setup_perfectoMobile) try: driver.implicitly_wait(30) print("Clicking Storage") report.step_start("Click Storage") store_ele = driver.find_element_by_xpath("//*[@text='Storage']") store_ele.click() except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Storage") try: driver.implicitly_wait(30) print("Clicking Clear Cache") report.step_start("Click Clear Cache") clear_ele = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/button2']") clear_ele.click() print("Cleared Cache") except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Clearcache") try: driver.implicitly_wait(30) print("Checking if cache cleared or not with 0B") report.step_start("Checking if cache cleared or not with 0B") check_ele = driver.find_element_by_xpath("//*[@text='0 B']") if check_ele is not None: return True else: return False except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Checking cache clear") closeApp(connData["appPackage-android"], setup_perfectoMobile) def check_if_no_internet_popup(driver):#To check and kill if any popups related to no internet time.sleep(1) driver.implicitly_wait(1) try: popup = driver.find_element_by_xpath("//*[@resource-id='android:id/alertTitle']") popup_text = popup.text try: if popup_text == "Internet may not be available": print("**alert** popup **alert**") try: driver.implicitly_wait(2) time.sleep(2) kill_popup = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/keep_btn']") kill_popup.click() print("popup killed") except: print("Couldnt kill popup") return False else: print("Popup Text is: ", popup_text) print("popup element is: ",popup) return False except: print("Popup Text is: ", popup_text) print("popup element is: ", popup) return False except: pass #To get an IP address def get_ip_address_and(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Select Wifi/AccessPoint Connection") print("-------------------------------------") print("Verifying Wifi Connection Details....") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] ip_address_element_text = False ssid_with_internet = False report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) # Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print("Selected Device Model: " + deviceModelName) if deviceModelName != ("Pixel 4"): report.step_start("Set Wifi Network to " + WifiName) # -----------------To Open Connections page----------------------- try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() # ---------------------Open WIFI page------------------------------- try: report.step_start("Clicking Wi-Fi") print("Clicking WIFI") time.sleep(3) wifiElement = WebDriverWait(driver, 10).until( EC.presence_of_element_located((MobileBy.XPATH,"//*[@text='Wi-Fi']"))) wifiElement.click() # --------------------To Turn on WIFi Switch if already OFF-------------------------------- try: driver.implicitly_wait(1) get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text print("get_switch_text: ",get_switch_text) print("Find wifi switch") try: #To Turn on Wi-Fi Switch if get_switch_text == "Off": # driver.implicitly_wait(3) get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(1) get_switch_element.click() driver.implicitly_wait(1) i = 0 for i in range(5): if get_switch_text == "On": print("WIFI Switch is ON") break else: try: get_switch_text_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text except: pass print("Sleeping for: ", i) time.sleep(i) pass if get_switch_text == "Off": print("Switch is Still OFF") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet else: print("Switch is already On") check_if_no_internet_popup(driver) except: print("Couldn't turn on WIFI switch") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet #---------------------This is to Forget current connected SSID------------------------------- try: #To deal with already connected SSID check_if_no_internet_popup(driver) network_category = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/connected_network_category']") try: #To forget exhisting ssid print("To forget ssid") check_if_no_internet_popup(driver) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forget old ssid") except: print("Couldn't forget ssid") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet except: print("Couldn't get into additional details") except: print("No Connected SSIDS") #----------------------This is to Forget current connected SSID-------------------------------- # time.sleep(2) print("Selecting Wifi: " + WifiName) #allure.attach(name= body=str("Selecting Wifi: " + WifiName)) ssid_found = False available_ssids = False #This is To get all available ssids #------------------------------------------------------ try: for k in range(9): available_ssids = get_all_available_ssids(driver) print("active_ssid_list: ", available_ssids) allure.attach(name="Available SSIDs in device: ", body=str(available_ssids)) try: if WifiName not in available_ssids: scrollDown(setup_perfectoMobile) time.sleep(2) else: ssid_found = True print(WifiName+" : Found in Device") #allure.attach(name= body=str(WifiName+" : Found in Device")) break except: print("couldn't find wifi in available ssid") if not ssid_found: print("could not found " + WifiName + " in device") #allure.attach(name= body=str("could not found" + WifiName + " in device")) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet except: closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet #------------------------------------------------------- #Selecting WIFI # ------------------------------------------------------- try: report.step_start("Selecting Wifi: " + WifiName) wifiSelectionElement = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifiSelectionElement.click() check_if_no_internet_popup(driver) except Exception as e: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") request.config.cache.set(key="SelectingWifiFailed", value=str(e)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet # ------------------------------------------------------- #Set password if Needed # ------------------------------------------------------- try: check_if_no_internet_popup(driver) report.step_start("Set Wifi Password") wifiPasswordElement = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/edittext']") wifiPasswordElement.send_keys(WifiPass) except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") check_if_no_internet_popup(driver) # ------------------------------------------------------- #Click on connect button # ------------------------------------------------------- try: report.step_start("Click Connect Button") joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']") joinBTNElement.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") check_if_no_internet_popup(driver) # ------------------------------------------------------- #Verify if WiFi is connected # ------------------------------------------------------- try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") # time.sleep(5) check_if_no_internet_popup(driver) except: try: check_if_no_internet_popup(driver) WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected without internet") check_if_no_internet_popup(driver) except: try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located(( MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet # ------------------------------------------------------- #Get into Additional Details #To Get an IP Address #To Forget connection #To turn off auto. connect # ------------------------------------------------------- try: print("Into additional details") time.sleep(2) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: time.sleep(2) ip_address_element = driver.find_element_by_xpath( "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='com.android.settings:id/summary']") ip_address_element_text = ip_address_element.text print("Device IP address is :", ip_address_element_text) except: try: time.sleep(2) ip_address_element = driver.find_element_by_xpath( "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']") ip_address_element_text = ip_address_element.text print("Device IP address is :", ip_address_element_text) except: print("IP address element not found") #allure.attach(name= body=str("IP address element not found")) # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ip_address_element_text, ssid_with_internet try: check_if_no_internet_popup(driver) driver.implicitly_wait(3) time.sleep(2) auto_reconnect_off = driver.find("//*[@resource-id='android:id/switch_widget']") auto_reconnect_off_text = auto_reconnect_off.text if auto_reconnect_off_text != "Off": auto_reconnect_off.click() print("Auto reconnect turning off") else: print("Auto reconnect is already off") except: print("Couldn't find auto reconnect element") # ------------------------------- Forget SSID ---------------- try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forgetting ssid") #------------------------------- Wifi Switch ---------------- try: print("clicking on wifi switch") get_switch_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(2) get_switch_element.click() except: print("couldn't click on wifi switch") #allure.attach(name= body=str("couldn't click on wifi switch")) except: print("Couldn't forget ssid") # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ip_address_element_text, ssid_with_internet except: print("Couldn't get into Additional settings") # ------------------------------------------------------- except: print("No Switch element found") # ---------------------To Turn on WIFi Switch if already OFF------------------------------- except: print("Couldn't find wifi Button") # ------------------Open WIFI page---------------------------------- except: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") # -----------------To Open Connections page--------------------------- closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet #only to connect to wifi def wifi_connect(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Select Wifi/AccessPoint Connection") print("-------------------------------------") print("Verifying Wifi Connection Details....") #allure.attach(name= body=str("\n-------------------------------------")) report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] ssid_with_internet = False report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) # Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print("Selected Device Model: " + deviceModelName) #allure.attach(name= body=str("\Selected Device Model: " + deviceModelName)) if deviceModelName != ("Pixel 4"): report.step_start("Set Wifi Network to " + WifiName) # -----------------To Open Connections page----------------------- try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() # ---------------------Open WIFI page------------------------------- try: report.step_start("Clicking Wi-Fi") print("Clicking WIFI") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() # --------------------To Turn on WIFi Switch if already OFF-------------------------------- try: driver.implicitly_wait(1) get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text print("get_switch_text: ",get_switch_text) print("Find wifi switch") try: #To Turn on Wi-Fi Switch if get_switch_text == "Off": # driver.implicitly_wait(3) get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(1) get_switch_element.click() driver.implicitly_wait(1) i = 0 for i in range(5): if get_switch_text == "On": print("WIFI Switch is ON") break else: try: get_switch_text_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text except: pass print("Sleeping for: ", i) time.sleep(i) pass if get_switch_text == "Off": print("Switch is Still OFF") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet else: print("Switch is already On") check_if_no_internet_popup(driver) except: print("Couldn't turn on WIFI switch") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet #---------------------This is to Forget current connected SSID------------------------------- try: #To deal with already connected SSID check_if_no_internet_popup(driver) network_category = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/connected_network_category']") try: #To forget exhisting ssid print("To forget ssid") check_if_no_internet_popup(driver) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forget old ssid") except: print("Couldn't forget ssid") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except: print("Couldn't get into additional details") except: print("No Connected SSIDS") #----------------------This is to Forget current connected SSID-------------------------------- print("Searching for Wifi: " + WifiName) #allure.attach(name= body=str("Searching for Wifi: " + WifiName)) time.sleep(2) print("Selecting Wifi: " + WifiName) ssid_found = False available_ssids = False # This is To get all available ssids # ------------------------------------------------------ try: for check_for_all_ssids in range(2): available_ssids = get_all_available_ssids(driver) try: if WifiName not in available_ssids: scrollDown(setup_perfectoMobile) time.sleep(2) else: ssid_found = True print(WifiName + " : Found in Device") #allure.attach(name= body=str(WifiName + " : Found in Device")) break except: print("1538") pass if not ssid_found: print("could not found" + WifiName + " in device") #allure.attach(name= body=str("could not found" + WifiName + " in device")) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except: closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- #Selecting WIFI # ------------------------------------------------------- try: report.step_start("Selecting Wifi: " + WifiName) wifiSelectionElement = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifiSelectionElement.click() check_if_no_internet_popup(driver) #allure.attach(name= body=str("Selecting Wifi: " + WifiName)) except Exception as e: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") #allure.attach(name= body=str("Exception on Selecting Wifi Network. Please check wifi Name or signal")) request.config.cache.set(key="SelectingWifiFailed", value=str(e)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- #Set password if Needed # ------------------------------------------------------- try: check_if_no_internet_popup(driver) report.step_start("Set Wifi Password") wifiPasswordElement = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/edittext']") wifiPasswordElement.send_keys(WifiPass) except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") check_if_no_internet_popup(driver) # ------------------------------------------------------- #Click on connect button # ------------------------------------------------------- try: report.step_start("Click Connect Button") joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']") joinBTNElement.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") check_if_no_internet_popup(driver) # ------------------------------------------------------- # //*[@resource-id='com.android.settings:id/summary' and @text="Sign in to the network."]/parent::*/android.widget.TextView[@text='XWF-OWF_DSx'] #Verify if WiFi is connected # ------------------------------------------------------- try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") #allure.attach(name= body=str("Wifi Successfully Connected")) # time.sleep(5) check_if_no_internet_popup(driver) except: try: check_if_no_internet_popup(driver) WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected without internet") #allure.attach(name= body=str("Wifi Successfully Connected without internet")) check_if_no_internet_popup(driver) except: try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located(( MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") #allure.attach(name=body=str("Wifi Successfully Connected")) except: try: report.step_start("Unknown WIFI status found") ssid_with_internet = False print("Unknown WIFI status found") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) #allure.attach(name=body=str("Wifi Connection Error: " + WifiName)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except NoSuchElementException: print("No Switch element found") #allure.attach(name= body=str("No Switch element found")) # ---------------------To Turn on WIFi Switch if already OFF------------------------------- except NoSuchElementException: print("Couldn't find wifi Button") #allure.attach(name= body=str("Couldn't find wifi Button")) # ------------------Open WIFI page---------------------------------- except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") #allure.attach(name= body=str("Exception: Verify Xpath - Update/check Xpath for Click Connections")) # -----------------To Open Connections page--------------------------- closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet #To disconnect and forget network def wifi_disconnect_and_forget(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") print("WIFI Disconnect") print("-------------------------------------") #allure.attach(name= body=str("------------------- WIFI Disconnect ------------------")) report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) # Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print("Selected Device Model: " + deviceModelName) if deviceModelName != ("Pixel 4"): report.step_start("Set Wifi Network to " + WifiName) # -----------------To Open Connections page----------------------- try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() # ---------------------Open WIFI page------------------------------- try: report.step_start("Clicking Wi-Fi") print("Clicking WIFI") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() # --------------------To Turn on WIFi Switch if already OFF-------------------------------- try: driver.implicitly_wait(1) get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text print("get_switch_text: ",get_switch_text) print("Find wifi switch") try: #To Turn on Wi-Fi Switch if get_switch_text == "Off": # driver.implicitly_wait(3) get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(1) get_switch_element.click() driver.implicitly_wait(1) i = 0 for i in range(5): if get_switch_text == "On": print("WIFI Switch is ON") break else: try: get_switch_text_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text except: pass print("Sleeping for: ", i) time.sleep(i) pass if get_switch_text == "Off": print("Switch is Still OFF") closeApp(connData["appPackage-android"], setup_perfectoMobile) else: print("Switch is already On") check_if_no_internet_popup(driver) except: print("Couldn't turn on WIFI switch") closeApp(connData["appPackage-android"], setup_perfectoMobile) #---------------------This is to Forget current connected SSID------------------------------- try: #To deal with already connected SSID check_if_no_internet_popup(driver) network_category = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/connected_network_category']") try: #To forget exhisting ssid print("To forget ssid") check_if_no_internet_popup(driver) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forget old ssid") #allure.attach(name=body=str("Forget old ssid")) except: print("Couldn't forget ssid") #allure.attach(name=body=str("Couldn't forget ssid")) closeApp(connData["appPackage-android"], setup_perfectoMobile) except: #allure.attach(name=body=str("Couldn't get into additional details")) print("Couldn't get into additional details") except: #allure.attach(name=body=str("No Connected SSIDS")) print("No Connected SSIDS") #----------------------This is to Forget current connected SSID-------------------------------- try: print("clicking on wifi switch") get_switch_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(2) get_switch_element.click() except: print("couldn't click on wifi switch") except NoSuchElementException: print("No Switch element found") # ---------------------To Turn on WIFi Switch if already OFF------------------------------- except NoSuchElementException: print("Couldn't find wifi Button") # ------------------Open WIFI page---------------------------------- except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") # -----------------To Open Connections page--------------------------- closeApp(connData["appPackage-android"], setup_perfectoMobile) # try: # elements = driver.find_elements_by_xpath("//*[@resource-id='com.android.settings:id/title']") # print("elements: ", elements) # print(len(elements)) # for i in range(len(elements)): # print("elements[i]", elements[i]) # print("elements[i].text", elements[i].text) # except: # print("No SSIDS available") def get_all_available_ssids(driver): active_ssid_list = [] try: time.sleep(2) driver.implicitly_wait(1) elements = driver.find_elements_by_xpath("//*[@resource-id='com.android.settings:id/title']") # print("elements: ", elements) print(len(elements)) for i in range(len(elements)): # print("elements[i]", elements[i]) # print("elements[i].text", elements[i].text) active_ssid_list.append(elements[i].text) except: print("No SSIDS available") #allure.attach(name= body=str("SSIDs visible in device: " + available_ssid)) return active_ssid_list def reportClient(value): global reporting_client # declare a to be a global reporting_client = value # this sets the global value of a # This is a functon to get all of the ssid details # This function needs to be called from a standalone script and not throuh testcase # def get_all_available_ssids(): # from appium import webdriver # driver = None # reporting_client = None # # warnings.simplefilter("ignore", ResourceWarning) # urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # # capabilities = { # 'platformName': 'Android', # 'model': 'Galaxy S9', # 'browserName': 'mobileOS', # # 'automationName' : 'Appium', # 'securityToken': 'eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI3NzkzZGM0Ni1jZmU4LTQ4ODMtYjhiOS02ZWFlZGU2OTc2MDkifQ.eyJpYXQiOjE2MjE4NjgyOTksImp0aSI6IjIzNGFiOTM1LWIxYjQtNGZiOC1hZmJiLTM0OTQwNzU5MjIwMyIsImlzcyI6Imh0dHBzOi8vYXV0aDIucGVyZmVjdG9tb2JpbGUuY29tL2F1dGgvcmVhbG1zL3RpcC1wZXJmZWN0b21vYmlsZS1jb20iLCJhdWQiOiJodHRwczovL2F1dGgyLnBlcmZlY3RvbW9iaWxlLmNvbS9hdXRoL3JlYWxtcy90aXAtcGVyZmVjdG9tb2JpbGUtY29tIiwic3ViIjoiN2I1MzBhZTAtODgxOC00N2I5LTgzZjMtN2ZhMGZiMGRkYjRlIiwidHlwIjoiT2ZmbGluZSIsImF6cCI6Im9mZmxpbmUtdG9rZW4tZ2VuZXJhdG9yIiwibm9uY2UiOiI1MzI2NDQxNS0xYTQwLTQ1ZTctOGVkMi1hOTNiYWZmZWNjYjIiLCJzZXNzaW9uX3N0YXRlIjoiY2YzY2JlOGMtY2Y5OC00NzRlLWJmODctYTIxNzU0NzVhM2EzIiwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSBvZmZsaW5lX2FjY2VzcyBlbWFpbCJ9.4a4v6AKxmY95Zb-l84K_Od49WPikwOHP7ryctfmnn-w', # 'useAppiumForWeb': 'false', # 'useAppiumForHybrid': 'false', # # 'bundleId' : request.config.getini("appPackage-android"), # } # # app_data = { # "webURL": "https://www.google.com", # "lblSearch": "//*[@class='gLFyf']", # "elelSearch": "(//*[@class='sbic sb43'])[1]", # "BtnRunSpeedTest": "//*[text()='RUN SPEED TEST']", # "bundleId-iOS-Settings": 'com.apple.Preferences', # "bundleId-iOS-Safari": 'com.apple.mobilesafari', # "downloadMbps": "//*[@id='knowledge-verticals-internetspeedtest__download']/P[@class='spiqle']", # "UploadMbps": "//*[@id='knowledge-verticals-internetspeedtest__upload']/P[@class='spiqle']", # # Android # "platformName-android": 'Android', # "appPackage-android": 'com.android.settings' # } # # driver = webdriver.Remote( # "https://tip.perfectomobile.com/nexperience/perfectomobile/wd/hub", # capabilities # ) # # try: # print(driver) # driver.implicitly_wait(35) # #Driver Ends here # # projectname = "TIP-PyTest-Execution" # projectversion = 1.0 # jobname = "tip-sushant-android" # jobnumber = 2 # tags = "TestTag" # testCaseName = "getting_ssids" # # # print("\nSetting Perfecto ReportClient....") # perfecto_execution_context = PerfectoExecutionContext(driver, tags, Job(jobname, jobnumber), # Project(projectname, projectversion)) # reporting_client = PerfectoReportiumClient(perfecto_execution_context) # reporting_client.test_start(testCaseName, TestContext([], "Perforce")) # reportClient(reporting_client) # # # setup_perfectoMobile = (driver, reporting_client) # print("setup_perfectoMobile_android: ", setup_perfectoMobile) # print(type(setup_perfectoMobile)) # # print("\n-------------------------------------") # print("Select Wifi/AccessPoint Connection") # print("-------------------------------------") # print("Verifying Wifi Connection Details....") # report = setup_perfectoMobile[1] # driver = setup_perfectoMobile[0] # # # # ip_address_element_text = False # ssid_with_internet = False # ssid_list = [] # # report.step_start("Switching Driver Context") # print("Switching Context to Native") # contexts = driver.contexts # print("contexts", contexts) # driver.switch_to.context(contexts[0]) # print("1508") # # # Open Settings Application # openApp(app_data["appPackage-android"], setup_perfectoMobile) # # deviceModelName = driver.execute_script('mobile:handset:info', {'property': 'model'}) # # # deviceModelName = getDeviceModelName(setup_perfectoMobile) # print("Selected Device Model: " + deviceModelName) # # if deviceModelName != ("Pixel 4"): # # -----------------To Open Connections page----------------------- # try: # print("Verifying Connected Wifi Connection") # report.step_start("Click Connections") # connElement = driver.find_element_by_xpath("//*[@text='Connections']") # connElement.click() # # # ---------------------Open WIFI page------------------------------- # try: # report.step_start("Clicking Wi-Fi") # print("Clicking WIFI") # wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") # wifiElement.click() # # # --------------------To Turn on WIFi Switch if already OFF-------------------------------- # try: # driver.implicitly_wait(1) # get_switch_text_element = driver.find_element_by_xpath( # "//*[@resource-id='com.android.settings:id/switch_text']") # get_switch_text = get_switch_text_element.text # print("get_switch_text: ", get_switch_text) # # print("Find wifi switch") # try: # To Turn on Wi-Fi Switch # if get_switch_text == "Off": # # driver.implicitly_wait(3) # get_switch_element = driver.find_element_by_xpath( # "//*[@resource-id='com.android.settings:id/switch_widget']") # # driver.implicitly_wait(1) # get_switch_element.click() # driver.implicitly_wait(1) # i = 0 # for i in range(5): # if get_switch_text == "On": # print("WIFI Switch is ON") # break # else: # try: # get_switch_text_element = driver.find_element_by_xpath( # "//*[@resource-id='com.android.settings:id/switch_text']") # get_switch_text = get_switch_text_element.text # except: # pass # print("Sleeping for: ", i) # time.sleep(i) # pass # if get_switch_text == "Off": # print("Switch is Still OFF") # closeApp(app_data["appPackage-android"], setup_perfectoMobile) # close_driver(driver) # return ip_address_element_text # else: # print("Switch is already On") # check_if_no_internet_popup(driver) # except: # print("Couldn't turn on WIFI sewitch") # closeApp(app_data["appPackage-android"], setup_perfectoMobile) # close_driver(driver) # return ip_address_element_text # # # ---------------------This is to Forget current connected SSID------------------------------- # try: # To deal with already connected SSID # check_if_no_internet_popup(driver) # network_category = driver.find_element_by_xpath( # "//*[@resource-id='com.android.settings:id/connected_network_category']") # try: # To forget exhisting ssid # print("To forget exhisting ssid") # check_if_no_internet_popup(driver) # additional_details_element = driver.find_element_by_xpath( # "//*[@resource-id='com.android.settings:id/layout_details']") # additional_details_element.click() # try: # check_if_no_internet_popup(driver) # forget_ssid = driver.find_element_by_xpath( # "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") # forget_ssid.click() # print("Forget old ssid") # except: # print("Couldn't forget ssid") # closeApp(app_data["appPackage-android"], setup_perfectoMobile) # close_driver(driver) # return ip_address_element_text # except: # print("Couldn't get into additional details") # except: # print("No Connected SSIDS") # # ----------------------This is to Forget current connected SSID-------------------------------- # scroll_if_not_end_of_page = True # # try: # for i in range(10): # try: # driver.implicitly_wait(5) # window_size = driver.get_window_size() # # print(window_size) # # print(type(window_size)) # window_width = window_size['width'] # # print(window_width) # window_height = window_size['height'] # # print(window_height) # try: # try: # elements = driver.find_elements_by_xpath( # "//*[@resource-id='com.android.settings:id/title']") # print("elements: ", elements) # print(len(elements)) # curent_ssid_list = [] # for j in range(len(elements)): # # print("elements[i].text", elements[j].text) # # print(j) # if i != 0: # curent_ssid_list.append(elements[j].text) # # print("curent_ssid_list: ", curent_ssid_list) # ssid_list.append(elements[j].text) # print("ssid_list",ssid_list) # print("curent_ssid_list: ", curent_ssid_list) # except: # print("No SSIDS available") # # try: # print("in check") # check = all(item in curent_ssid_list for item in ssid_list) # print("check: ", check) # if check: # scroll_if_not_end_of_page = False # break # else: # new_window_height = window_height + 100 # # driver.scroll(0, new_window_height) # driver.execute_script("mobile: scroll", {"direction": "down"}) # continue # except: # print("Error in page end") # except: # pass # except: # pass # except: # pass # except NoSuchElementException: # print("No Switch element found") # # ---------------------To Turn on WIFi Switch if already OFF------------------------------- # # except NoSuchElementException: # print("Couldn't find wifi Button") # # ------------------Open WIFI page---------------------------------- # # except NoSuchElementException: # print("Exception: Verify Xpath - Update/check Xpath for Click Connections") # # -----------------To Open Connections page--------------------------- # # except: # try: # closeApp(app_data["appPackage-android"], setup_perfectoMobile) # except: # pass # try: # reporting_client.test_stop(TestResultFactory.create_success()) # print('Report-Url: ' + reporting_client.report_url() + '\n') # except: # pass # try: # close_driver(driver) # except: # pass # finally: # try: # reporting_client.test_stop(TestResultFactory.create_success()) # print('Report-Url: ' + reporting_client.report_url() + '\n') # except: # pass # try: # close_driver(driver) # except: # pass # return ssid_list #------------Enterprise Mode code---------------------------- def get_ip_address_eap_and(request, WifiName, User, ttls_passwd, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Select Wifi/AccessPoint Connection") print("-------------------------------------") print("Verifying Wifi Connection Details....") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] ip_address_element_text = False ssid_with_internet = False report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) # Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print("Selected Device Model: " + deviceModelName) if deviceModelName != ("Pixel 4"): report.step_start("Set Wifi Network to " + WifiName) # -----------------To Open Connections page----------------------- try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() # ---------------------Open WIFI page------------------------------- try: report.step_start("Clicking Wi-Fi") print("Clicking WIFI") time.sleep(3) wifiElement = WebDriverWait(driver, 10).until( EC.presence_of_element_located((MobileBy.XPATH,"//*[@text='Wi-Fi']"))) wifiElement.click() # --------------------To Turn on WIFi Switch if already OFF-------------------------------- try: driver.implicitly_wait(1) get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text print("get_switch_text: ",get_switch_text) print("Find wifi switch") try: #To Turn on Wi-Fi Switch if get_switch_text == "Off": # driver.implicitly_wait(3) get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(1) get_switch_element.click() driver.implicitly_wait(1) i = 0 for i in range(5): if get_switch_text == "On": print("WIFI Switch is ON") break else: try: get_switch_text_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text except: pass print("Sleeping for: ", i) time.sleep(i) pass if get_switch_text == "Off": print("Switch is Still OFF") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet else: print("Switch is already On") check_if_no_internet_popup(driver) except: print("Couldn't turn on WIFI switch") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet #---------------------This is to Forget current connected SSID------------------------------- try: #To deal with already connected SSID check_if_no_internet_popup(driver) network_category = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/connected_network_category']") try: #To forget exhisting ssid print("To forget ssid") check_if_no_internet_popup(driver) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forget old ssid") except: print("Couldn't forget ssid") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet except: print("Couldn't get into additional details") except: print("No Connected SSIDS") #----------------------This is to Forget current connected SSID-------------------------------- time.sleep(2) print("Selecting Wifi: " + WifiName) #allure.attach(name= body=str("Selecting Wifi: " + WifiName)) ssid_found = False available_ssids = False #This is To get all available ssids #------------------------------------------------------ try: for k in range(10): available_ssids = get_all_available_ssids(driver) print("active_ssid_list: ", available_ssids) allure.attach(name="Available SSIDs in device: ", body=str(available_ssids)) try: if WifiName not in available_ssids: scrollDown(setup_perfectoMobile) time.sleep(2) else: ssid_found = True print(WifiName+" : Found in Device") #allure.attach(name= body=str(WifiName+" : Found in Device")) break except: print("couldn't find wifi in available ssid") if not ssid_found: print("could not found " + WifiName + " in device") #allure.attach(name= body=str("could not found" + WifiName + " in device")) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet except: closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet #------------------------------------------------------- # Selecting WIFI # ------------------------------------------------------- try: report.step_start("Selecting Wifi: " + WifiName) print("Selecting Wifi") wifiSelectionElement = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifiSelectionElement.click() check_if_no_internet_popup(driver) except Exception as e: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") request.config.cache.set(key="SelectingWifiFailed", value=str(e)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet # ------------------------------------------------------- # Set username # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Set User name") print("Set User name") wifiUserElement = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/edittext' and @password='false']") wifiUserElement.send_keys(User) except NoSuchElementException: print("User name not Loaded") # ------------------------------------------------------- # Set Password # ------------------------------------------------------- try: driver.implicitly_wait(6) report.step_start("Set Password") print("Set Password") wifiPasswordElement = driver.find_element_by_xpath( "//*[@text='Enter password']") wifiPasswordElement.send_keys(ttls_passwd) print("Entered Password") except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") # ------------------------------------------------------- # Selecting certificate # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Selecting CA Cert") certElement = driver.find_element_by_xpath( "//*[@text='Select certificate']") certElement.click() except NoSuchElementException: print("Selecting certificate failed") # ------------------------------------------------------- # Validating certificate # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Validting CA Cert") certElement = driver.find_element_by_xpath( "//*[@text=\"Don't validate\"]") certElement.click() except NoSuchElementException: print("validation failed") # ------------------------------------------------------- # Click on connect button # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Click Connect Button") joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']") joinBTNElement.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") check_if_no_internet_popup(driver) # ------------------------------------------------------- #Verify if WiFi is connected # ------------------------------------------------------- try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") # time.sleep(5) check_if_no_internet_popup(driver) except: try: check_if_no_internet_popup(driver) WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected without internet") check_if_no_internet_popup(driver) except: try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located(( MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet # ------------------------------------------------------- #Get into Additional Details #To Get an IP Address #To Forget connection #To turn off auto. connect # ------------------------------------------------------- try: print("Into additional details") time.sleep(2) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: time.sleep(2) ip_address_element = driver.find_element_by_xpath( "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='com.android.settings:id/summary']") ip_address_element_text = ip_address_element.text print("Device IP address is :", ip_address_element_text) except: try: time.sleep(2) ip_address_element = driver.find_element_by_xpath( "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']") ip_address_element_text = ip_address_element.text print("Device IP address is :", ip_address_element_text) except: print("IP address element not found") #allure.attach(name= body=str("IP address element not found")) # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ip_address_element_text, ssid_with_internet try: check_if_no_internet_popup(driver) driver.implicitly_wait(3) time.sleep(2) auto_reconnect_off = driver.find("//*[@resource-id='android:id/switch_widget']") auto_reconnect_off_text = auto_reconnect_off.text if auto_reconnect_off_text != "Off": auto_reconnect_off.click() print("Auto reconnect turning off") else: print("Auto reconnect is already off") except: print("Couldn't find auto reconnect element") # ------------------------------- Forget SSID ---------------- try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forgetting ssid") #------------------------------- Wifi Switch ---------------- try: print("clicking on wifi switch") get_switch_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(2) get_switch_element.click() except: print("couldn't click on wifi switch") #allure.attach(name= body=str("couldn't click on wifi switch")) except: print("Couldn't forget ssid") # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ip_address_element_text, ssid_with_internet except: print("Couldn't get into Additional settings") # ------------------------------------------------------- except: print("No Switch element found") # ---------------------To Turn on WIFi Switch if already OFF------------------------------- except: print("Couldn't find wifi Button") # ------------------Open WIFI page---------------------------------- except: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") # -----------------To Open Connections page--------------------------- closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet #only to connect to wifi def wifi_connect_eap(request, WifiName, User, ttls_passwd, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Select Wifi/AccessPoint Connection") print("-------------------------------------") print("Verifying Wifi Connection Details....") #allure.attach(name= body=str("\n-------------------------------------")) report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] ssid_with_internet = False report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) # Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print("Selected Device Model: " + deviceModelName) #allure.attach(name= body=str("\Selected Device Model: " + deviceModelName)) if deviceModelName != ("Pixel 4"): report.step_start("Set Wifi Network to " + WifiName) # -----------------To Open Connections page----------------------- try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() # ---------------------Open WIFI page------------------------------- try: report.step_start("Clicking Wi-Fi") print("Clicking WIFI") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() # --------------------To Turn on WIFi Switch if already OFF-------------------------------- try: driver.implicitly_wait(1) get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text print("get_switch_text: ",get_switch_text) print("Find wifi switch") try: #To Turn on Wi-Fi Switch if get_switch_text == "Off": # driver.implicitly_wait(3) get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(1) get_switch_element.click() driver.implicitly_wait(1) i = 0 for i in range(5): if get_switch_text == "On": print("WIFI Switch is ON") break else: try: get_switch_text_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text except: pass print("Sleeping for: ", i) time.sleep(i) pass if get_switch_text == "Off": print("Switch is Still OFF") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet else: print("Switch is already On") check_if_no_internet_popup(driver) except: print("Couldn't turn on WIFI switch") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet #---------------------This is to Forget current connected SSID------------------------------- try: #To deal with already connected SSID check_if_no_internet_popup(driver) network_category = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/connected_network_category']") try: #To forget exhisting ssid print("To forget ssid") check_if_no_internet_popup(driver) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forget old ssid") except: print("Couldn't forget ssid") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except: print("Couldn't get into additional details") except: print("No Connected SSIDS") #----------------------This is to Forget current connected SSID-------------------------------- print("Searching for Wifi: " + WifiName) #allure.attach(name= body=str("Searching for Wifi: " + WifiName)) time.sleep(2) print("Selecting Wifi: " + WifiName) ssid_found = False available_ssids = False # This is To get all available ssids # ------------------------------------------------------ try: for check_for_all_ssids in range(2): available_ssids = get_all_available_ssids(driver) try: if WifiName not in available_ssids: scrollDown(setup_perfectoMobile) time.sleep(2) else: ssid_found = True print(WifiName + " : Found in Device") #allure.attach(name= body=str(WifiName + " : Found in Device")) break except: print("1538") pass if not ssid_found: print("could not found" + WifiName + " in device") #allure.attach(name= body=str("could not found" + WifiName + " in device")) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except: closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- # Selecting WIFI # ------------------------------------------------------- try: report.step_start("Selecting Wifi: " + WifiName) print("Selecting Wifi") wifiSelectionElement = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifiSelectionElement.click() check_if_no_internet_popup(driver) except Exception as e: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") request.config.cache.set(key="SelectingWifiFailed", value=str(e)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- # Set username # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Set User name") print("Set User name") wifiUserElement = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/edittext' and @password='false']") wifiUserElement.send_keys(User) except NoSuchElementException: print("User name not Loaded") # ------------------------------------------------------- # Set Password # ------------------------------------------------------- try: driver.implicitly_wait(6) report.step_start("Set Password") print("Set Password") wifiPasswordElement = driver.find_element_by_xpath( "//*[@text='Enter password']") wifiPasswordElement.send_keys(ttls_passwd) print("Entered Password") except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") # ------------------------------------------------------- # Selecting certificate # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Selecting CA Cert") certElement = driver.find_element_by_xpath( "//*[@text='Select certificate']") certElement.click() except NoSuchElementException: print("Selecting certificate failed") # ------------------------------------------------------- # Validating certificate # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Validting CA Cert") certElement = driver.find_element_by_xpath( "//*[@text=\"Don't validate\"]") certElement.click() except NoSuchElementException: print("validation failed") # ------------------------------------------------------- # Click on connect button # ------------------------------------------------------- try: driver.implicitly_wait(3) report.step_start("Click Connect Button") joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']") joinBTNElement.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") check_if_no_internet_popup(driver) # ------------------------------------------------------- #Verify if WiFi is connected # ------------------------------------------------------- try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") #allure.attach(name= body=str("Wifi Successfully Connected")) # time.sleep(5) check_if_no_internet_popup(driver) except: try: check_if_no_internet_popup(driver) WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected without internet") #allure.attach(name= body=str("Wifi Successfully Connected without internet")) check_if_no_internet_popup(driver) except: try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located(( MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") #allure.attach(name=body=str("Wifi Successfully Connected")) except NoSuchElementException: print("Wifi Connection Error: " + WifiName) #allure.attach(name=body=str("Wifi Connection Error: " + WifiName)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except NoSuchElementException: print("No Switch element found") #allure.attach(name= body=str("No Switch element found")) # ---------------------To Turn on WIFi Switch if already OFF------------------------------- except NoSuchElementException: print("Couldn't find wifi Button") #allure.attach(name= body=str("Couldn't find wifi Button")) # ------------------Open WIFI page---------------------------------- except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") #allure.attach(name= body=str("Exception: Verify Xpath - Update/check Xpath for Click Connections")) # -----------------To Open Connections page--------------------------- closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet #--------------------CAPTIVE PORTAL Android----------------------------------------- def captive_portal_and(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Select Wifi/AccessPoint Connection") print("-------------------------------------") print("Verifying Wifi Connection Details....") #allure.attach(name= body=str("\n-------------------------------------")) report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] ssid_with_internet = False report.step_start("Switching Driver Context") print("Switching Context to Native") contexts = driver.contexts driver.switch_to.context(contexts[0]) # Open Settings Application openApp(connData["appPackage-android"], setup_perfectoMobile) deviceModelName = getDeviceModelName(setup_perfectoMobile) print("Selected Device Model: " + deviceModelName) #allure.attach(name= body=str("\Selected Device Model: " + deviceModelName)) if deviceModelName != ("Pixel 4"): report.step_start("Set Wifi Network to " + WifiName) # -----------------To Open Connections page----------------------- try: print("Verifying Connected Wifi Connection") report.step_start("Click Connections") connElement = driver.find_element_by_xpath("//*[@text='Connections']") connElement.click() # ---------------------Open WIFI page------------------------------- try: report.step_start("Clicking Wi-Fi") print("Clicking WIFI") wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") wifiElement.click() # --------------------To Turn on WIFi Switch if already OFF-------------------------------- try: driver.implicitly_wait(1) get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text print("get_switch_text: ",get_switch_text) print("Find wifi switch") try: #To Turn on Wi-Fi Switch if get_switch_text == "Off": # driver.implicitly_wait(3) get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(1) get_switch_element.click() driver.implicitly_wait(1) i = 0 for i in range(5): if get_switch_text == "On": print("WIFI Switch is ON") break else: try: get_switch_text_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_text']") get_switch_text = get_switch_text_element.text except: pass print("Sleeping for: ", i) time.sleep(i) pass if get_switch_text == "Off": print("Switch is Still OFF") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet else: print("Switch is already On") check_if_no_internet_popup(driver) except: print("Couldn't turn on WIFI switch") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet #---------------------This is to Forget current connected SSID------------------------------- try: #To deal with already connected SSID check_if_no_internet_popup(driver) network_category = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/connected_network_category']") try: #To forget exhisting ssid print("To forget ssid") check_if_no_internet_popup(driver) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") forget_ssid.click() print("Forget old ssid") except: print("Couldn't forget ssid") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except: print("Couldn't get into additional details") except: print("No Connected SSIDS") #----------------------This is to Forget current connected SSID-------------------------------- print("Searching for Wifi: " + WifiName) #allure.attach(name= body=str("Searching for Wifi: " + WifiName)) time.sleep(2) print("Selecting Wifi: " + WifiName) ssid_found = False available_ssids = False # This is To get all available ssids # ------------------------------------------------------ try: for check_for_all_ssids in range(2): available_ssids = get_all_available_ssids(driver) try: if WifiName not in available_ssids: scrollDown(setup_perfectoMobile) time.sleep(2) else: ssid_found = True print(WifiName + " : Found in Device") #allure.attach(name= body=str(WifiName + " : Found in Device")) break except: print("1538") pass if not ssid_found: print("could not found" + WifiName + " in device") #allure.attach(name= body=str("could not found" + WifiName + " in device")) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except: closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- #Selecting WIFI # ------------------------------------------------------- try: report.step_start("Selecting Wifi: " + WifiName) print("Click wifi") wifi_selection_element = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifi_selection_element.click() check_if_no_internet_popup(driver) #allure.attach(name= body=str("Selecting Wifi: " + WifiName)) except Exception as e: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") #allure.attach(name= body=str("Exception on Selecting Wifi Network. Please check wifi Name or signal")) request.config.cache.set(key="SelectingWifiFailed", value=str(e)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- #Set password if Needed # ------------------------------------------------------- try: time.sleep(2) check_if_no_internet_popup(driver) report.step_start("Set Wifi Password") print("Enter Wifi password") wifi_password_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/edittext']") wifi_password_element.send_keys(WifiPass) except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") check_if_no_internet_popup(driver) # ------------------------------------------------------- #Click on connect button # ------------------------------------------------------- try: time.sleep(2) report.step_start("Click Connect Button") print("Click Connect Button") join_btn_element = driver.find_element_by_xpath("//*[@text='Connect']") join_btn_element.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") check_if_no_internet_popup(driver) #---------------------Clicking on ssid for captive portal login-------- try: time.sleep(2) report.step_start("Selecting Wifi: " + WifiName) wifi_selection_element = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifi_selection_element.click() except NoSuchElementException: print("Not connected to Captive portal Ssid.. ") try: time.sleep(2) report.step_start("Click Accept Terms Button") print("Click Accept Terms Button") join_btn_element = driver.find_element_by_xpath("//*[@text='Accept Terms of Service']") join_btn_element.click() except NoSuchElementException: print(" Couldn't press Accept terms button") try: time.sleep(2) report.step_start("Click Continue Button") print("Click Continue Button") join_btn_element = driver.find_element_by_xpath("//*[@text='Continue']") join_btn_element.click() except NoSuchElementException: print(" Couldn't press Continue button") try: time.sleep(2) report.step_start("Click Last Terms if needed") print("Click Last Terms if needed") join_btn_element = driver.find_element_by_xpath("//*[@text='Done']") join_btn_element.click() except NoSuchElementException: print(" Couldn't find the last terms page") #Verify if WiFi is connected # ------------------------------------------------------- try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") #allure.attach(name= body=str("Wifi Successfully Connected")) # time.sleep(5) check_if_no_internet_popup(driver) except: try: check_if_no_internet_popup(driver) WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected without internet") #allure.attach(name= body=str("Wifi Successfully Connected without internet")) check_if_no_internet_popup(driver) except: try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located(( MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") #allure.attach(name=body=str("Wifi Successfully Connected")) except NoSuchElementException: print("Wifi Connection Error: " + WifiName) #allure.attach(name=body=str("Wifi Connection Error: " + WifiName)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- # Get into Additional Details # To Get an IP Address # To Forget connection # To turn off auto. connect # ------------------------------------------------------- try: print("Into additional details") time.sleep(2) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/layout_details']") additional_details_element.click() try: time.sleep(2) ip_address_element = driver.find_element_by_xpath( "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='com.android.settings:id/summary']") ip_address_element_text = ip_address_element.text print("Device IP address is :", ip_address_element_text) except: try: time.sleep(2) ip_address_element = driver.find_element_by_xpath( "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']") ip_address_element_text = ip_address_element.text print("Device IP address is :", ip_address_element_text) except: print("IP address element not found") # allure.attach(name= body=str("IP address element not found")) # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ip_address_element_text, ssid_with_internet try: check_if_no_internet_popup(driver) driver.implicitly_wait(3) time.sleep(2) auto_reconnect_off = driver.find("//*[@resource-id='android:id/switch_widget']") auto_reconnect_off_text = auto_reconnect_off.text if auto_reconnect_off_text != "Off": auto_reconnect_off.click() print("Auto reconnect turning off") else: print("Auto reconnect is already off") except: print("Couldn't find auto reconnect element") except: print("Couldn't get into Additional settings") except NoSuchElementException: print("No Switch element found") #allure.attach(name= body=str("No Switch element found")) # ---------------------To Turn on WIFi Switch if already OFF------------------------------- except NoSuchElementException: print("Couldn't find wifi Button") #allure.attach(name= body=str("Couldn't find wifi Button")) # ------------------Open WIFI page---------------------------------- except NoSuchElementException: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") #allure.attach(name= body=str("Exception: Verify Xpath - Update/check Xpath for Click Connections")) # -----------------To Open Connections page--------------------------- # --------------------Pixel 4 code--------------------------- else: report.step_start("Set Wifi Network to " + WifiName) # -----------------To Open Connections page----------------------- try: print("Verifying Connected Wifi Connection") report.step_start("Click Network & internet in pixel4") connElement = driver.find_element_by_xpath("//*[@text='Network & internet']") connElement.click() # ---------------------Open WIFI page------------------------------- try: report.step_start("Clicking Wi-Fi") print("Clicking WIFI") time.sleep(3) wifiElement = WebDriverWait(driver, 10).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='Wi‑Fi']"))) wifiElement.click() # --------------------To Turn on WIFi Switch if already OFF-------------------------------- try: driver.implicitly_wait(1) report.step_start("Turn on WIFi Switch if already OFF") get_switch_text_element = driver.find_element_by_xpath( "//*[@resource-id='android:id/icon']") get_switch_text = get_switch_text_element.click() if get_switch_text is not None: switch_text = "Off" else: switch_text = "On" print("get_switch_text: ", switch_text) print("Find wifi switch") try: # To Turn on Wi-Fi Switch if switch_text == "Off": # driver.implicitly_wait(3) get_switch_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/switch_widget']") driver.implicitly_wait(1) get_switch_element.click() driver.implicitly_wait(1) i = 0 for i in range(5): if switch_text == "On": print("WIFI Switch is ON") break else: try: get_switch_text_element = driver.find_element_by_xpath( "//*[@text='Add network']") get_switch_text = get_switch_text_element.text if get_switch_text == "Add network": switch_text = "On" else: switch_text = "Off" except NoSuchElementException: print("Exception: Verify Xpath") # Scroll Down scrollDown(setup_perfectoMobile) print("Sleeping for: ", i) time.sleep(i) pass if switch_text == "Off": print("Switch is Still OFF") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet else: print("Switch is already On") check_if_no_internet_popup(driver) except: print("Couldn't turn on WIFI switch") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ---------------------This is to Forget current connected SSID------------------------------- try: # To deal with already connected SSID check_if_no_internet_popup(driver) network_category = driver.find_element_by_xpath("//*[@text='Connected']") try: # To forget existing ssid print("To forget ssid") report.step_start("To forget ssid") check_if_no_internet_popup(driver) additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/settings_button_no_background']") additional_details_element.click() except: print("Couldn't get into additional details") try: check_if_no_internet_popup(driver) forget_ssid = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/button1']") forget_ssid.click() print("Forget old ssid") except: print("Couldn't forget ssid") closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet except: print("No Connected SSIDS") # ----------------------This is to Forget current connected SSID-------------------------------- # time.sleep(2) # print("Selecting Wifi: " + WifiName) # ssid_found = False # available_ssids = False # This is To get all available ssids # ------------------------------------------------------ # try: # for check_for_all_ssids in range(2): # available_ssids = WifiName # try: # if WifiName not in available_ssids: # scrollDown(setup_perfectoMobile) # time.sleep(2) # else: # ssid_found = True # print(WifiName + " : Found in Device") # # allure.attach(name= body=str(WifiName + " : Found in Device")) # break # except: # print("1538") # pass # if not ssid_found: # print("could not found" + WifiName + " in device") # # allure.attach(name= body=str("could not found" + WifiName + " in device")) # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ssid_with_internet # except: # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ssid_with_internet # # ------------------------------------------------------- # Selecting WIFI # ------------------------------------------------------- try: report.step_start("Selecting Wifi: " + WifiName) print("Click wifi") wifi_selection_element = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifi_selection_element.click() check_if_no_internet_popup(driver) # allure.attach(name= body=str("Selecting Wifi: " + WifiName)) except Exception as e: print("Exception on Selecting Wifi Network") # allure.attach(name= body=str("Exception on Selecting Wifi Network. Please check wifi Name or signal")) request.config.cache.set(key="SelectingWifiFailed", value=str(e)) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- # Set password if Needed # ------------------------------------------------------- try: check_if_no_internet_popup(driver) report.step_start("Set Wifi Password") print("Entering password") wifiPasswordElement = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/password']") wifiPasswordElement.send_keys(WifiPass) except NoSuchElementException: print("Password Page Not Loaded, password May be cached in the System") check_if_no_internet_popup(driver) # ------------------------------------------------------- # Click on connect button # ------------------------------------------------------- try: report.step_start("Click Connect Button") joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']") joinBTNElement.click() except NoSuchElementException: print("Connect Button Not Enabled...Verify if Password is set properly ") check_if_no_internet_popup(driver) # ------------------------------------------------------- try: report.step_start("Selecting Wifi: " + WifiName) wifiSelectionElement = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) wifiSelectionElement.click() check_if_no_internet_popup(driver) except Exception as e: print("Exception on Selecting Wifi Network. Please check wifi Name or signal") try: time.sleep(2) report.step_start("Click Accept Terms Button") print("Click Accept Terms Button") join_btn_element = driver.find_element_by_xpath("//*[@text='Accept Terms of Service']") join_btn_element.click() except NoSuchElementException: print(" Couldn't press Accept terms button") try: time.sleep(2) report.step_start("Click Continue Button") print("Click Continue Button") join_btn_element = driver.find_element_by_xpath("//*[@text='Continue']") join_btn_element.click() except NoSuchElementException: print(" Couldn't press Continue button") try: time.sleep(2) report.step_start("Click Last Terms if needed") print("Click Last Terms if needed") join_btn_element = driver.find_element_by_xpath("//*[@text='Done']") join_btn_element.click() except NoSuchElementException: print(" Couldn't find the last terms page") # Verify if WiFi is connected # ------------------------------------------------------- try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") # time.sleep(5) check_if_no_internet_popup(driver) except: try: check_if_no_internet_popup(driver) WifiInternetErrMsg = WebDriverWait(driver, 35).until( EC.presence_of_element_located((MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) print("Wifi Successfully Connected without internet") check_if_no_internet_popup(driver) except: try: report.step_start("Verify if Wifi is Connected") WifiInternetErrMsg = WebDriverWait(driver, 60).until( EC.presence_of_element_located(( MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) ssid_with_internet = True print("Wifi Successfully Connected") except NoSuchElementException: print("Wifi Connection Error: " + WifiName) closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet # ------------------------------------------------------- # Get into Additional Details # To Get an IP Address # To Forget connection # To turn off auto. connect # ------------------------------------------------------- try: print("Into additional details") time.sleep(5) report.step_start("Going for ip address") additional_details_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/settings_button_no_background']") additional_details_element.click() print("Entered ssid") try: time.sleep(10) print("clicking Advanced") report.step_start("clicking Advanced") advanced_element = driver.find_element_by_xpath("//*[@text='Advanced']") advanced_element.click() print("clicked Advanced") # print("Device IP address is :", ip_address_element_text) except: try: time.sleep(5) print("clicking Advanced2") advanced_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/recycler_view']/android.widget.FrameLayout[2]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]") advanced_element.click() # print("Device IP address is :", ip_address_element_text) except: try: time.sleep(5) print("clicking Advanced2") advanced_element = driver.find_element_by_xpath( "//*[@resource-id='com.android.settings:id/recycler_view']/android.widget.LinearLayout[5]/android.widget.LinearLayout[1]/android.widget.ImageView[1]") advanced_element.click() except: print("No advanced options") # allure.attach(name= body=str("IP address element not found")) # closeApp(connData["appPackage-android"], setup_perfectoMobile) # return ip_address_element_text, ssid_with_internet # Scroll Down scrollDown(setup_perfectoMobile) try: time.sleep(2) ip_address_element = driver.find_element_by_xpath( "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']") ip_address_element_text = ip_address_element.text print("Device IP address is :", ip_address_element_text) except: print("IP address element not found") except: print("Couldn't get into Additional settings") # ------------------------------------------------------- except: print("No Switch element found") # ---------------------To Turn on WIFi Switch if already OFF------------------------------- except: print("Couldn't find wifi Button") # ------------------Open WIFI page---------------------------------- except: print("Exception: Verify Xpath - Update/check Xpath for Click Connections") # -----------------To Open Connections page--------------------------- closeApp(connData["appPackage-android"], setup_perfectoMobile) return ip_address_element_text, ssid_with_internet def close_driver(driver): driver.close() driver.quit() def expressWifi(request, WifiName, setup_perfectoMobile, connData): print("\n-------------------------------------") print("Express Wifi Verification") print("-------------------------------------") report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] try: click_on_ssid = WebDriverWait(driver, 10).until(EC.presence_of_element_located(( MobileBy.XPATH, "//*[@resource-id='com.android.settings:id/summary' and @text='Sign in to the network.']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) click_on_ssid.click() print("click on expresswifi SSID to open login page") except: print("Could not found expresswifi SSID") try: print("Express Wifi Home Page Verification") report.step_start("Express Wifi Home Page Verification") driver.implicitly_wait(2) ExpressWifiBytesLeft = driver.find_element_by_xpath("//*[@label='0KB left']") except NoSuchElementException: # driver.implicitly_wait(25) #Add function to Toggle Wifi if Express Wifi Home Page not Triggerd print("Express Wifi Page Not Logged In - ") try: print("ExpressWifi Click on Menu Circle") report.step_start("ExpressWifi Click on Menu Circle") ExpressWifiMenu = driver.find_element_by_xpath("//*[@resource-id='dogfood-menu']") ExpressWifiMenu.click() except NoSuchElementException: print("---- Exception ExpressWifi Click on Menu Circle") try: print("ExpressWifi Click Run Tests!") report.step_start("ExpressWifi Click Run Tests!") ExpressWifiRunTests = driver.find_element_by_xpath("//*[@resource-id='run_tests']") ExpressWifiRunTests.click() time.sleep(20) except NoSuchElementException: print("Exception ExceptionExpressWifi Click Run Tests!") try: print("Verify Results: ") report.step_start("Verify Results") expressWifiOutputMsg = "//*[@resource-id='test_result']" LogOut = driver.find_element_by_xpath(expressWifiOutputMsg) print("----" + LogOut.text + "\n") if 'test completed successfully' in LogOut.text: closeApp(connData["appPackage-android"], setup_perfectoMobile) return True else: closeApp(connData["appPackage-android"], setup_perfectoMobile) return False except NoSuchElementException: print("Exception Verify Results") closeApp(connData["appPackage-android"], setup_perfectoMobile)