def __init__(self): ''' init function. @see: L{Base <Base>} ''' self.mode_name = "phone" Base.__init__(self, self.mode_name) self.settings = Settings() self.debug_print('Base init:%f' % (time.time()))
def __init__(self): self.mode_name = "phone" Base.__init__(self,self.mode_name) self.settings = Settings() self.predefined_numbers = PREDEFINED_NUMBERS self.debug_print( 'Base init:%f' %(time.time())) self.call_delay = CALL_DELAY self.call_ini_time = CALL_INI_TIME self.call_start_time = CALL_START_TIME
class Phone(Base): PREDEFINED_NUMBERS = { "0": "zero", "1": "one", "2": "two", "3": "three", "4": "four", "5": "five", "6": "six", "7": "seven", "8": "eight", "9": "nine" } ''' Phone is a class for operating Phone application. @see: L{Base <Base>} ''' def __init__(self): ''' init function. @see: L{Base <Base>} ''' self.mode_name = "phone" Base.__init__(self, self.mode_name) self.settings = Settings() self.debug_print('Base init:%f' % (time.time())) def go_home(self): for i in range(10): flag1 = is_view_enabled_by_text(VIEW_TEXT_VIEW, 'Speed Dial', isScrollable=0, searchFlag=TEXT_MATCHES) flag2 = is_view_enabled_by_text(VIEW_TEXT_VIEW, 'Recents', isScrollable=0, searchFlag=TEXT_MATCHES) flag3 = is_view_enabled_by_text(VIEW_TEXT_VIEW, 'Contacts', isScrollable=0, searchFlag=TEXT_MATCHES) '''try:scroll_to_bottom() except:pass''' if flag1 & flag2 & flag3 is True: return True else: goback() sleep(1) return False # MO by one slot # parameter: # phoneNumber: the whole call phone number # smartNumber: part phone number to match contacts # slot: 0--slot1, 1--slot2 2-- default slot can use for emergency call # Return: # True: get through. # False: no def phone_call(self, phoneNumber, smartNumber, slot, call_duration): ''' MO by one slot @type phoneNumber: string @param phoneNumber: the whole call phone number. @type smartNumber: string @param smartNumber: part phone number to match contacts. @type slot: number @param slot: 0--slot1, 1--slot2 2-- default slot can use for emergency call. @return: True: get through; False: no. ''' # dial if smartNumber != "": self.smart_dial(smartNumber, phoneNumber) else: self.dial(phoneNumber) callmark = "" if slot == 0: callmark = "callmark1" elif slot == 1: callmark = "callmark2" elif slot != 2: return False sleep(3) if slot == 0: if search_text("Call with"): take_screenshot() click_textview_by_index(1) # click_textview_by_text("SUB 01") # click_in_list_by_index(1) # ##search_view_by_id("call_action_sub_icon2") and elif slot == 1: if search_text("Call with"): take_screenshot() click_textview_by_index(2) # click_textview_by_text("SUB 02") # click_in_list_by_index(2) else: sleep(1) if slot != 2 and search_view_by_id(callmark): click_button_by_id(callmark) sleep(1) click_button_by_id(callmark) if search_text(self.get_value("network_not_available")): take_screenshot() return False # whether get through. sleep(call_duration) # func = lambda:((is_view_enabled_by_id(VIEW_IMAGE_VIEW, 'elapsedTime'))) # if wait_for_fun(func, True, 10): # elapsedTime = get_view_text_by_id(VIEW_TEXT_VIEW, 'elapsedTime', isScrollable=0) if search_view_by_id("incall_end_call"): click_button_by_id("incall_end_call") return True else: return False # remove guide info when enter phone app for the first time def remove_gudie_info(self): ''' remove guide info when enter phone app for the first time ''' if search_view_by_id("clingText") == True: click_button_by_text(self.get_value("ok"), 1, 0) # data call switch to always ask # parameter: # card_id,1-slot1,2-slot2,0-always ask def set_data_call(self, card_id): ''' data call switch to always ask @type card_id: number @param card_id: 1-slot1,2-slot2,0-always ask. ''' sleep(1) # remove guide info when enter first time self.remove_gudie_info() start_activity('com.android.settings', '.Settings') self.settings.set_default_voice(card_id) goback() def call_back_from_history(self): ''' call back from history ''' click_imageview_by_desc('More options') click_textview_by_text('Call History') click_textview_by_text('All') click_textview_by_id('filter_sub_spinner') sleep(1) click_textview_by_text('ALL SIMS') if search_text('10086'): click_textview_by_text('10086') click_textview_by_text('Call Back') elif search_text('12117'): click_textview_by_text('12117') click_textview_by_text('Call Back') else: #click_textview_by_index(0) click_textview_by_id('name') click_textview_by_text('Call Back') sleep(float(SC.PRIVATE_PHONE_CALL_TIME)) func = lambda: ( (is_view_enabled_by_id(VIEW_IMAGE_VIEW, 'elapsedTime'))) if wait_for_fun(func, True, 10): elapsedTime = get_view_text_by_id(VIEW_TEXT_VIEW, 'elapsedTime', isScrollable=0) if search_view_by_id("floating_end_call_action_button") and (cmp( elapsedTime, '00:00')): click_button_by_id("floating_end_call_action_button") return True else: return False # used for API def smart_dial(self, smartNumber, phoneNumber): ''' inner used. According to input phone number to match contacts,then dial. @type smartNumber: string @param smartNumber: part phone number to match contacts. @type phoneNumber: string @param phoneNumber: the whole call phone number. ''' click_imageview_by_id("deleteButton", 1, 0, 0, LONG_CLICK) for i in range(0, len(smartNumber)): click_imageview_by_id(str(self.PREDEFINED_NUMBERS[smartNumber[i]])) click_view_by_container_id('filterbutton', 'android.widget.TextView', 0) sleep(1) click_textview_by_text(phoneNumber) click_imageview_by_id("dialButton") # used for API def dial(self, phoneNumber): ''' inner used. Firstly, delete existed phone number. Then input number and dial @type phoneNumber: string @param phoneNumber: the whole call phone number. ''' if search_view_by_id("deleteButton"): #click_imageview_by_id("deleteButton", 1, 0, 0, LONG_CLICK) for i in range(11): click_imageview_by_id("deleteButton") sleep(1) sleep(1) call_number_str = [s for s in phoneNumber] for phoneNumber in call_number_str: if phoneNumber == "1": click_imageview_by_id("dialpad_key_voicemail") else: click_imageview_by_id(str( self.PREDEFINED_NUMBERS[phoneNumber])) sleep(2) if search_view_by_id("dialButton"): click_imageview_by_id("dialButton") else: click_button_by_id("floating_action_button") def input_dial_number(self, phoneNumber): #c_caijie ''' inner used. Firstly, delete existed phone number. Then input number @type phoneNumber: string @param phoneNumber: the whole call phone number. ''' if search_view_by_id("deleteButton"): click_imageview_by_id("deleteButton", 1, 0, 0, LONG_CLICK) sleep(10) call_number_str = [s for s in phoneNumber] for phoneNumber in call_number_str: if phoneNumber == "1": click_imageview_by_id("dialpad_key_voicemail") else: click_imageview_by_id(str( self.PREDEFINED_NUMBERS[phoneNumber])) sleep(1) # used for API def speed_dial(self, speed_dail_number, Number): ''' inner used. According to input phone number to match contacts,then dial. @type smartNumber: string @param smartNumber: part phone number to match contacts. @type phoneNumber: string @param phoneNumber: the whole call phone number. ''' click_imageview_by_id('dialtacts_options_menu_button') click_textview_by_text('Settings') click_textview_by_text('Call settings') click_textview_by_text('Speed dial settings', isScrollable=1) sleep(1) take_screenshot() click_textview_by_text(Number) if search_text("Input Number"): log_test_framework("weixiang--> :", "number 2 have not been added speed dail") entertext_edittext_on_focused(speed_dail_number) click_button_by_id('btn_complete') if search_text(speed_dail_number): log_test_framework("weixiang--> :", "number 2 added speed dail successfully") return True else: log_test_framework("weixiang--> :", "number 2 added speed dail failed") take_screenshot() return False elif (not search_text("Key unassigned")) and (search_text("Delete")): log_test_framework( "weixiang--> :", "number 2 added speed dail before, need delete it firstly") click_textview_by_text('Delete') click_textview_by_text(Number) if search_text("Input Number"): log_test_framework("weixiang--> :", "number 2 have not been added speed dail") entertext_edittext_on_focused(speed_dail_number) click_button_by_id('btn_complete') if search_text(speed_dail_number): log_test_framework( "weixiang--> :", "number 2 added speed dail successfully") return True else: log_test_framework("weixiang--> :", "number 2 added speed dail failed") take_screenshot() return False # used for API def clear_call_log(self): ''' inner used. Firstly, delete existed phone number. Then input number and dial @type phoneNumber: string @param phoneNumber: the whole call phone number. ''' sleep(1) click_imageview_by_id('dialtacts_options_menu_button') sleep(1) click_textview_by_text('Call History') sleep(1) click_textview_by_text('All') sleep(1) click_textview_by_id('filter_sub_spinner') sleep(1) click_textview_by_text('ALL SIMS') if search_text("Your call log is empty"): log_test_framework("weixiang--> :", "No call Log") return True else: send_key(KEY_MENU) click_textview_by_text('Clear call log') sleep(1) click_imageview_by_desc('More options') delstr = 'All' if search_text(delstr): click_textview_by_text(delstr) if is_view_enabled_by_id(VIEW_TEXT_VIEW, 'done', isScrollable=0): click_textview_by_desc('done') else: log_test_framework("weixiang--> :", "No call Log") return True sleep(2) # if wait_for_fun(lambda:search_text('will be deleted'), True, 10): if search_text('Sure to delete the call logs ', searchFlag=TEXT_CONTAINS): # click_textview_by_text('OK') click_button_by_text('OK') return True else: return False def permission_allow(self): #c_caijie if search_text("NEXT", isScrollable=0, searchFlag=TEXT_CONTAINS): click_textview_by_text("NEXT", isScrollable=0) sleep(4) for i in range(8): if search_view_by_id('permission_allow_button'): click_button_by_id('permission_allow_button', isScrollable=0) sleep(5) def del_all_calllog(self): #c_caijie click_button_by_id('dialtacts_options_menu_button') sleep(3) click_textview_by_text('Call History') sleep(3) click_imageview_by_desc("More options") sleep(3) click_textview_by_text('Clear call history') sleep(3) click_checkbox_by_id('select_all_check') sleep(3) click_textview_by_id('btn_ok') sleep(3) click_button_by_text('OK') sleep(10)
############################################ #author: # [email protected] #function: # the qrd share lib. #doc: # juts need you to add : import your_model as alias ############################################ # init a instance of the mode notificationBar = NotificationBar() camera = Camera() weibo = Weibo() renren = Renren() settings = Settings() playstore = PlayStore() launcher = Launcher() phone = Phone() browser = Browser() email = Email() doubanfm = Doubanfm() mms = Mms() gmail = Gmail() ime = IME() contact = Contact() gallery = Gallery() cmccMTBF = CmccMTBF() sample = Sample() incommon = InCommon()
class Phone(Base): def __init__(self): self.mode_name = "phone" Base.__init__(self,self.mode_name) self.settings = Settings() self.predefined_numbers = PREDEFINED_NUMBERS self.debug_print( 'Base init:%f' %(time.time())) self.call_delay = CALL_DELAY self.call_ini_time = CALL_INI_TIME self.call_start_time = CALL_START_TIME def phone_call(self, call_number, slot, call_duration): numberlist = self.predefined_numbers drag_by_param(0,50,100,50,10) drag_by_param(0,50,100,50,10) #clear existing number click_imageview_by_id("deleteButton",clickType=LONG_CLICK) call_number_str = [s for s in call_number ] for callnumber in call_number_str: click_imageview_by_id(numberlist[callnumber]) click_imageview_by_id("dialButton") self.call_ini_time=time.strftime('%X',time.localtime(time.time())) # if SC.PUBLIC_DSDS: # callmark = "" # if slot == 0: # callmark = "callmark1" # elif slot == 1: # callmark = "callmark2" # click_button_by_id(callmark) #MO phoneOn = self.check_phoneON(10) if phoneOn: sleep(call_duration) if search_view_by_id("endButton"): click_button_by_id("endButton") return True else: return False # def call_delay(self): def phone_call_from_list(self, slot): drag_by_param(0,50,100,50,10) drag_by_param(0,50,100,50,10) drag_by_param(90,50,10,50,10) #Choose a number click_textview_by_text('10086' or 'test') #Dial click_textview_by_text('Call') #Choose a slot if SC.PUBLIC_DSDS: callmark = "" if slot == 0: callmark = "callmark1" elif slot == 1: callmark = "callmark2" click_button_by_id(callmark) #MO phoneOn = self.check_phoneON(10) if phoneOn: time.sleep(1) if search_view_by_id("endButton"): click_button_by_id("endButton") return True else: return False def phone_call_multiparty(self,call_number1,call_number2,call_slot,call_duration): numberlist = self.predefined_numbers drag_by_param(0,50,100,50,10) drag_by_param(0,50,100,50,10) #clear existing number click_imageview_by_id("deleteButton",clickType=LONG_CLICK) call_number_str = [s for s in call_number1] for callnumber in call_number_str: click_imageview_by_id(numberlist[callnumber]) click_imageview_by_id("dialButton") if SC.PUBLIC_DSDS: callmark = "" if call_slot == 0: callmark = "callmark1" elif call_slot == 1: callmark = "callmark2" click_button_by_id(callmark) sleep(5) click_imageview_by_id("addButton") # click_imageview_by_index(3) call_number_str = [s for s in call_number2] for callnumber in call_number_str: click_imageview_by_id(numberlist[callnumber]) click_imageview_by_id("dialButton") sleep(5) click_imageview_by_id("mergeButton") phoneOn = False phoneOn = self.check_phoneON(30) if phoneOn: sleep(call_duration) if search_view_by_id("endButton"): click_button_by_id("endButton") return True else: return False save_fail_log() def check_phoneON(self, starttime): # if search_text(self.get_value("network_not_available")): # return False if search_view_by_id("message"): return False #whether get through. phoneOn = False t = 0 while search_view_by_id("endButton") and t < starttime: if search_text("0:"): self.call_start_time=time.strftime('%X',time.localtime(time.time())) phoneOn = True sleep(3) break sleep(1) t = t+1 time_start_strlis=self.call_ini_time.split(':') time_end_strlis=self.call_start_time.split(':') sec=int(time_end_strlis[2])+int(time_end_strlis[1])*60+int(time_end_strlis[0])*60*60-int(time_start_strlis[2])-int(time_start_strlis[1])*60-int(time_start_strlis[0])*60*60 self.call_delay = sec if phoneOn == False: return False else: return True #remove guide info when enter phone app for the first time def remove_gudie_info(self): if search_view_by_id("clingText") == True: click_button_by_text(self.get_value("ok"),1,0) #data call switch to always ask #parameter: # card_id,1-slot1,2-slot2,0-always ask def set_data_call(self, card_id): sleep(1) #remove guide info when enter first time self.remove_gudie_info() start_activity('com.android.settings','.Settings') self.settings.set_default_voice(card_id) goback() #used for API def smart_dial(self, smartNumber, phoneNumber): click_imageview_by_id("deleteButton",1,0,0,LONG_CLICK) for i in range(0, len(smartNumber)): click_imageview_by_id(str(PREDEFINED_NUMBERS[smartNumber[i]])) click_view_by_container_id('filterbutton', 'android.widget.TextView', 0) sleep(1) click_textview_by_text(phoneNumber) click_imageview_by_id("dialButton") def dial(self, call_number, slot, call_duration): numberlist = self.predefined_numbers drag_by_param(0,50,100,50,10) drag_by_param(0,50,100,50,10) #clear existing number click_imageview_by_id("deleteButton",clickType=LONG_CLICK) call_number_str = [s for s in call_number ] for callnumber in call_number_str: click_imageview_by_id(numberlist[callnumber]) click_imageview_by_id("dialButton") #MO phoneOn = False phoneOn = self.check_phoneON(30) return phoneOn def call_waiting_on(self,slot): if SC.PUBLIC_DSDS: click_textview_by_text(self.get_value("select_subscription")) if slot == 0: click_textview_by_text(self.get_value("sim1")) else: click_textview_by_text(self.get_value("sim2")) click_textview_by_text(self.get_value("GSM_call_settings")) click_textview_by_text(self.get_value("additional_settings")) sleep(15) flag = is_checkbox_checked_by_index(0) if flag == False: click_textview_by_text(self.get_value("call_waiting")) sleep(15) else: click_textview_by_text(self.get_value("additional_settings")) sleep(15) flag = is_checkbox_checked_by_index(0) if flag == False: click_textview_by_text(self.get_value("call_waiting")) sleep(15) def call_waiting_off(self,slot): if SC.PUBLIC_DSDS: click_textview_by_text(self.get_value("select_subscription")) if slot == 0: click_textview_by_text(self.get_value("sim1")) else: click_textview_by_text(self.get_value("sim2")) click_textview_by_text(self.get_value("GSM_call_settings")) click_textview_by_text(self.get_value("additional_settings")) sleep(15) flag = is_checkbox_checked_by_index(0) if flag == True: click_textview_by_text(self.get_value("call_waiting")) sleep(15) else: click_textview_by_text(self.get_value("additional_settings")) sleep(15) flag = is_checkbox_checked_by_index(0) if flag == True: click_textview_by_text(self.get_value("call_waiting")) sleep(15) def call_forwarding_on(self,forward_num,type,slot): if SC.PUBLIC_DSDS: click_textview_by_text(self.get_value("select_subscription")) if slot == 0: click_textview_by_text(self.get_value("sim1")) else: click_textview_by_text(self.get_value("sim2")) click_textview_by_text(self.get_value("GSM_call_settings")) click_textview_by_text(self.get_value("call_forwarding")) sleep(15) ''' type 0: always forward type 1-3: other forward type ''' if type == 0: if not search_text(self.get_value("forward_all_calls_status"),0,0): click_textview_by_text(self.get_value("always_forward")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) elif type == 1: if not search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_busy")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) elif type ==2: if not search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unanswered")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) elif type ==3: if not search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unreachable")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) else: click_textview_by_text(self.get_value("call_forwarding")) sleep(15) ''' type 0: always forward type 1-3: other forward type ''' if type == 0: if not search_text(self.get_value("forward_all_calls_status"),0,0): click_textview_by_text(self.get_value("always_forward")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) elif type == 1: if not search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_busy")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) elif type ==2: if not search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unanswered")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) elif type ==3: if not search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unreachable")) entertext_edittext_by_id('edit',forward_num) click_button_by_id('button3') sleep(15) def call_forwarding_off(self,type,slot): if SC.PUBLIC_DSDS: click_textview_by_text(self.get_value("select_subscription")) if slot == 0: click_textview_by_text(self.get_value("sim1")) else: click_textview_by_text(self.get_value("sim2")) click_textview_by_text(self.get_value("GSM_call_settings")) click_textview_by_text(self.get_value("call_forwarding")) sleep(15) ''' type 0: always forward ''' if type == 0: if search_text(self.get_value("forward_all_calls_status"),0,0): click_textview_by_text(self.get_value("always_forward")) click_button_by_id('button3') sleep(15) elif type == 1: if search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_busy")) click_button_by_id('button3') sleep(15) elif type ==2: if search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unanswered")) click_button_by_id('button3') sleep(15) elif type ==3: if search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unreachable")) click_button_by_id('button3') sleep(15) else: click_textview_by_text(self.get_value("call_forwarding")) sleep(15) ''' type 0: always forward ''' if type == 0: if search_text(self.get_value("forward_all_calls_status"),0,0): click_textview_by_text(self.get_value("always_forward")) click_button_by_id('button3') sleep(15) elif type == 1: if search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_busy")) click_button_by_id('button3') sleep(15) elif type ==2: if search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unanswered")) click_button_by_id('button3') sleep(15) elif type ==3: if search_text(self.get_value("forward_other_status"),0,0): click_textview_by_text(self.get_value("forward_when_unreachable")) click_button_by_id('button3') sleep(15) def mtcall(self,call_number_slot1,call_repeat_times_slot1,call_duration,waittime,intervaltime): click_textview_by_text("MT Call") click_textview_by_text("Add") entertext_edittext_by_index(0,call_number_slot1) click_textview_by_text("Ok") entertext_edittext_by_index(1,call_repeat_times_slot1) entertext_edittext_by_index(2,call_duration) entertext_edittext_by_index(3,waittime) entertext_edittext_by_index(4,intervaltime) goback() click_textview_by_text("Send") sleep(15) def check_call_status(self): if search_text(self.get_value("return")): #click_button_by_text("Return to call in progress") click_textview_by_text(self.get_value("return")) if search_view_by_id("endButton"): click_button_by_id("endButton") return True else: return False else: return False def clear_call_log(self): drag_by_param(0,50,100,50,10) drag_by_param(0,50,100,50,10) drag_by_param(90,50,10,50,10) if not search_text(self.get_value("call_log_is_empty")): send_key(KEY_MENU) clear_call_log = self.get_value("clear_call_log") if wait_for_fun(lambda:search_text(clear_call_log), True, 3): click_textview_by_text(clear_call_log) click_checkbox_by_id('select_all_check') click_button_by_text(self.get_value('ok')) click_button_by_text(self.get_value('ok')) wait_for_fun(lambda:search_text(self.get_value("call_log_is_empty")), True, 10) return else: return else: return def call_autoanswer_enable(self): if not is_checkbox_checked_by_index(0): click_checkbox_by_id("checkbox") def call_autoanswer_disable(self): if is_checkbox_checked_by_index(0): click_checkbox_by_id("checkbox")