def getLocateMethodAndValue(self, login_data_list, login_object): login_excel_path = r"F:\AutotestCode\Data\login_data.xls" login_sheetname = "objname_locatemethod_locatedata" sheet = ReadExcel.ReadExcel().getTableBySheetName( login_excel_path, login_sheetname) row_col_list = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(login_excel_path, login_sheetname, login_object) old_how = sheet.cell_value(row_col_list[0], (row_col_list[1] + 1)) what = sheet.cell_value(row_col_list[0], (row_col_list[1] + 2)) #在这里增加一个字典是因为如果直接把By.ID写在excel里的话,取出来不能用 locate_method_dict = { 'id': By.ID, 'css': By.CSS_SELECTOR, 'xpath': By.XPATH, 'linktext': By.LINK_TEXT } new_how = locate_method_dict[old_how] how_what = [] how_what.append(login_object) how_what.append(new_how) how_what.append(what) how_what.append(self.getOperateMethod(login_object)) return how_what
def getRegisterObjectLocateMethod(self, browser, register_data_list, register_object): register_exclepath = "F:\\pytest\\xebest-autotest\\Data\\register_data.xls" register_sheetname = "objname_locatemethod_locatedata" register_sheet = ReadExcel.ReadExcel().getTableBySheetName( register_exclepath, register_sheetname) row_col_list = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(register_exclepath, register_sheetname, register_object) old_how = register_sheet.cell_value(row_col_list[0], (row_col_list[1] + 1)) what = register_sheet.cell_value(row_col_list[0], (row_col_list[1] + 2)) #在这里增加一个字典是因为如果直接把By.ID写在excel里的话,取出来不能用 locate_method_dict = { 'id': By.ID, 'css': By.CSS_SELECTOR, 'xpath': By.XPATH, 'linktext': By.LINK_TEXT } new_how = locate_method_dict[old_how] self.locateRegisterObject(browser, register_data_list, register_object, new_how, what)
def assertIsEqual(self, testcaseid): """ 通过断言判断错误提示是否和期望的一致,并且通过查询界面的元素是否出现以及元素的文本值去判断(通过界面)是否注册成功。如果查询到注册成功的标记则返回true ,否则返回false """ assertmessage_exclepath = "F:\\pytest\\xebest-autotest\\Data\\registerByPhoneNumber_data.xls" assertmessage_sheetname = "assert_message" assertmessage_sheet = ReadExcel.ReadExcel().getTableBySheetName( assertmessage_exclepath, assertmessage_sheetname) rows = assertmessage_sheet.nrows for i in range(1, rows): if testcaseid in assertmessage_sheet.cell_value(i, 0): time.sleep(3) if self.browser.find_element_by_xpath( assertmessage_sheet.cell_value( i, 3)).text != assertmessage_sheet.cell_value( i, 4): print u"页面提示语:%s" % (self.browser.find_element_by_xpath( assertmessage_sheet.cell_value( i, 3)).text) + "\t" + u"和预期的提示语:%s:不相等" % ( assertmessage_sheet.cell_value(i, 4)) self.assertEqual(self.browser.find_element_by_xpath( assertmessage_sheet.cell_value(i, 3)).text, assertmessage_sheet.cell_value(i, 4), msg="not equal") else: continue if self.browser.find_element_by_xpath( "//a[@class='btn-red']/span").is_displayed( ) and self.browser.find_element_by_xpath( "//a[@class='btn-red']/span").text == u">>去邮箱激活": return True else: return False
def operatePayElement(self,element,located_element,send_data_list): log=ResultLog.ResultLog() excel=ReadExcel.ReadExcel() operate_excel_path="F:\\pytest\\xebest-autotest\\Data\\pay_by_balance.xls" operate_sheet=excel.getTableBySheetName(operate_excel_path,"operate_method") #得到操作方式所在列 operate_method=u"操作方式" operate_method_col_index=get_number_by_data.GetRowAndColNumber().getRowAndColNumber(operate_excel_path,"operate_method",operate_method)[1] #得到元素所在行 row_index=get_number_by_data.GetRowAndColNumber().getRowAndColNumber(operate_excel_path,"operate_method",element)[0] operate_method_flag=operate_sheet.cell_value(row_index,operate_method_col_index) if operate_method_flag=='click': try: located_element.click() time.sleep(3) except: print ("element:%s cannot operate" %element) raise ValueError("no element can operate") else: log.info("元素:%s 操作成功" %(element.encode('utf-8'))) elif operate_method_flag=='sendkey' and element==u'CheckCodeInput': checkcode=SmsCheckCode.SmsCheckCode().getCheckCode() time.sleep(2) if checkcode: log.info("验证码获取成功,获取到的验证码为:%s" %(checkcode.encode('utf-8'))) else: log.info("验证码获取失败") located_element.send_keys(checkcode) elif operate_method_flag=='sendkey' and element==u'PayPasswordInput': located_element.clear() located_element.send_keys(send_data_list[0])
def opermateAddProductElement(self, br, object_name, located_element, data_list): br = br object_name = object_name located_element = located_element excel = ReadExcel.ReadExcel() operate_method_excelpath = "F:\\pytest\\editAutotest\\Data\\addProduct_data.xls" operate_method_sheet = excel.getTableBySheetName( operate_method_excelpath, "operate_method") row_col_number_list = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(operate_method_excelpath, "operate_method", object_name) operate_method = operate_method_sheet.cell_value( row_col_number_list[0], row_col_number_list[1] + 1) print object_name if operate_method == 'click': located_element.click() time.sleep(4) elif operate_method == 'sendkey' and object_name == u'产品标题': located_element.clear() located_element.send_keys(data_list[0]) elif operate_method == 'sendkey' and object_name == u'关键词': located_element.clear() located_element.send_keys(data_list[1]) elif operate_method == 'sendkey' and object_name == u'产品规格': located_element.clear() located_element.send_keys(data_list[2]) elif operate_method == 'sendkey' and object_name == u'生产厂家': located_element.clear() located_element.send_keys(data_list[3]) elif operate_method == 'sendkey' and object_name == u'保质期': located_element.clear() located_element.send_keys(int(data_list[4])) elif operate_method == 'sendkey' and object_name == u'存储条件': located_element.clear() located_element.send_keys(data_list[5]) elif operate_method == 'sendkey' and object_name == u'生产许可证号': located_element.clear() located_element.send_keys(data_list[6]) elif operate_method == 'sendkey' and object_name == u'产品标准号': located_element.clear() located_element.send_keys(data_list[7]) elif operate_method == 'sendkey' and object_name == u'批发价': located_element.clear() located_element.send_keys(int(data_list[8])) elif operate_method == 'sendkey' and object_name == u'零售价': located_element.clear() located_element.send_keys(int(data_list[9])) elif operate_method == 'sendkey' and object_name == u'供货量': located_element.clear() located_element.send_keys(int(data_list[10])) elif operate_method == 'sendkey' and object_name == u'最小起订量': located_element.clear() located_element.send_keys(int(data_list[11])) elif operate_method == 'sendkey' and object_name == u'发货期限': located_element.clear() located_element.send_keys(int(data_list[12])) elif operate_method == 'sendkey' and object_name == u'图片上传弹出框的浏览按钮': located_element.send_keys(data_list[13]) elif operate_method == 'sendkey' and object_name == u'产品简介': located_element.clear() located_element.send_keys(data_list[14]) elif operate_method == 'sendkey' and object_name == u'验证码': located_element.clear() located_element.send_keys(int(data_list[15]))
def getLoacteMethodAndData(self, browser, element, send_data_list): excel = ReadExcel.ReadExcel() locate_element_path = "F:\\pytest\\xebest-autotest\\Data\\pay_by_balance.xls" locate_element_sheet = excel.getTableBySheetName( locate_element_path, 'objname_locatemethod_locatedata') #得到需要定位的元素所在的行号 row_index = get_number_by_data.GetRowAndColNumber().getRowAndColNumber( locate_element_path, 'objname_locatemethod_locatedata', element)[0] #得到定位方式所在的列号 locate_mehtod = u"定位方式简述" locate_method_col_index = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(locate_element_path, 'objname_locatemethod_locatedata', locate_mehtod)[1] #得到定位元素所需要的数据所在的列号 locate_data = u"定位所需数据" locate_data_col_index = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(locate_element_path, 'objname_locatemethod_locatedata', locate_data)[1] #得到元素是否需要二次定位的标志 second_locate = u"是否需要二次定位" is_second_locate = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(locate_element_path, 'objname_locatemethod_locatedata', second_locate)[1] locate_method_dict = { 'id': By.ID, 'css': By.CSS_SELECTOR, 'xpath': By.XPATH, 'linktext': By.LINK_TEXT } old_locate_method = locate_element_sheet.cell_value( row_index, locate_method_col_index) what = locate_element_sheet.cell_value(row_index, locate_data_col_index) second_locate_flag = locate_element_sheet.cell_value( row_index, is_second_locate) new_locate_how = locate_method_dict[old_locate_method] if not (LocateElementCommonClass.CommonClass(). judgeSecondLocateElement(second_locate_flag)): located_element = LocateElementCommonClass.CommonClass( ).findElement(browser, new_locate_how, what, element) OperatePayByBalanceElement.OperatePayByBalanceElement( ).operatePayElement(element, located_element, send_data_list) else: #得到二次定位方式的值所在列 secondLocatemethod_key = u"二次定位的方式" secondLocate_colNumber = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(locate_element_path, "objname_locatemethod_locatedata", secondLocatemethod_key)[1] old_second_how = locate_element_sheet.cell_value( row_index, secondLocate_colNumber) #得到二次定位所需值 secondLocateData_key = u"二次定位所需数据" secondLocateData_colNumber = get_number_by_data.GetRowAndColNumber( ).getRowAndColNumber(locate_element_path, "objname_locatemethod_locatedata", secondLocateData_key)[1] secondLocate_what = locate_element_sheet.cell_value( row_index, secondLocateData_colNumber) new_second_how = locate_method_dict[old_second_how] second_located_element = LocateElementCommonClass.CommonClass( ).locateElementIndirectly(browser, new_locate_how, what, new_second_how, secondLocate_what) OperatePayByBalanceElement.OperatePayByBalanceElement( ).operatePayElement(element, second_located_element, send_data_list) # pp=LocatePayByBalanceObject() # pp.getLocateElementList()
def locateObject(self, browser, object_username, object_password, object_name): br = browser username = object_username password = object_password locate_element = object_name login_class2 = Login.Login() #实例化Login类 log = ResultLog.ResultLog() readexcel_class2 = ReadExcel.ReadExcel() objectname_locatemethod_locatedata_excelpath = "F:\\pytest\\testcase\\Data\\login_data.xls" objectname_locatemethod_locatedata_sheet = readexcel_class2.getTable( objectname_locatemethod_locatedata_excelpath) #得到excel操作实体 objectname_locatemethod_locatedata_sheet_rows = readexcel_class2.getExcelRows( objectname_locatemethod_locatedata_excelpath) #得到excel总行数 #定义一个字典去映射excel表中的元素定位方式 dic1 = { 'id': By.ID, 'css': By.CSS_SELECTOR, 'xpath': By.XPATH, 'linktext': By.LINK_TEXT } #循环excel中的每一行,判断定位方式是id、css、xpath,每一行是一个界面元素 for i in range(objectname_locatemethod_locatedata_sheet_rows): list3 = objectname_locatemethod_locatedata_sheet.row_values(i) if list3[0] == locate_element: #在该行中,如果定位方式是id,就使用id定位方式 if list3[1] == 'id': try: element = br.find_element(by=dic1['id'], value=list3[2]) log.info("元素%s 定位成功" % locate_element.encode('utf-8')) except: log.info("需要操作的元素%s 不存在" % locate_element.encode('utf-8')) login_class2.operate_element(br, username, password, locate_element, element) #在该行中,如果定位方式是css,就使用css定位方式 elif list3[1] == 'css': try: element = br.find_element(by=dic1['css'], value=list3[2]) log.info("元素%s 定位成功" % locate_element.encode('utf-8')) except: log.info("需要操作的元素%s 不存在" % locate_element.encode('utf-8')) login_class2.operate_element(br, username, password, locate_element, element) #在该行中,如果定位方式是xpath,就使用xpath定位方式 elif list3[1] == 'xpath': try: element = br.find_element(by=dic1['xpath'], value=list3[2]) log.info("元素%s 定位成功" % locate_element.encode('utf-8')) except: log.info("需要操作的元素%s 不存在" % locate_element.encode('utf-8')) login_class2.operate_element(br, username, password, locate_element, element) elif list3[1] == 'linktext': try: element = br.find_element(by=dic1['linktext'], value=list3[2]) log.info("元素%s 定位成功" % locate_element.encode('utf-8')) except: log.info("需要操作的元素%s 不存在" % locate_element.encode('utf-8')) login_class2.operate_element(br, username, password, locate_element, element)
def getLocateMethodAndData(self,browser,object_name,data_list): """根据需要定位的元素的名称得到需要定位的元素的定位方式以及定位数据""" obj_name=object_name br=browser locate_method_data_excelpath="F:\\pytest\\editAutotest\\Data\\addProduct_data.xls" row_col_number_list=get_number_by_data.GetRowAndColNumber().getRowAndColNumber(locate_method_data_excelpath,"objname_locatemethod_locatedata",obj_name)#获得需要定位的元素名称所在的行和列 excel=ReadExcel.ReadExcel() locate_method_data_sheet=excel.getTableBySheetName(locate_method_data_excelpath,"objname_locatemethod_locatedata") old_how=locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+1)#获得excel中存储的定位方式 what=locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+2)#获得excel中存储的定位数据 first_oneOrMore=locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+3)#取得标记位以供判断是需要多次定位的元素在第一次定位时是定位一个元素还是定位多个元素 second_oneOrMore=locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+8)#取得标记位以供判断是需要多次定位的元素在第二次定位时是定位一个元素还是定位多个元素 second_locate_flag=locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+5)#取得标记位以供判断元素是否需要二次定位 #在这里增加一个字典是因为如果直接把By.ID写在excel里的话,取出来不能用 locate_method_dict={'id':By.ID,'css':By.CSS_SELECTOR,'xpath':By.XPATH,'linktext':By.LINK_TEXT} #通过判断second_locate_flag的值,如果是N的话就表示不需要进行二次判断,那么直接使用定位元素并且定位的直接方式进行 if second_locate_flag=='N': if old_how=='linktext': new_how=locate_method_dict["linktext"] #调用定位元素方法,并传递给该方法一个定位方式,定位值,元素名称,用户名,密码,弹出框内容 self.locateElement(br,new_how,what,obj_name,data_list) elif old_how=='id': new_how=locate_method_dict['id'] #调用定位元素方法,并传递给该方法一个定位方式,定位值,元素名称,用户名,密码,弹出框内容 self.locateElement(br,new_how,what,obj_name,data_list) elif old_how=='css': new_how=locate_method_dict["css"] if first_oneOrMore=='element': self.locateElement(br,new_how,what,obj_name,data_list) elif first_oneOrMore=='elements': elements_index=int(locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+4)) self.locateElements(br,new_how,what,elements_index,obj_name,data_list) elif old_how=='xpath': new_how=locate_method_dict["xpath"] #调用定位元素方法,并传递给该方法一个定位方式,定位值,元素名称,用户名,密码,弹出框内容 self.locateElement(br,new_how,what,obj_name,data_list) elif old_how=='js': #调用定位元素方法,并传递给该方法一个定位方式,定位值,元素名称,用户名,密码,弹出框内容 self.locateElementByJs(br,what,obj_name,data_list) elif old_how=='switchwindow': self.switchWindow(br,int(what),object_name,data_list) #通过判断second_locate_flag的值,如果是Y的话就表示需要进行二次判断,那么需要两次定位才能定位到该元素 elif second_locate_flag=='Y': second_how=locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+6)#得到二次定位的方式 second_what=locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+7)#得到二次定位所需的定位数据 if old_how=='linktext': new_how=locate_method_dict["linktext"] #调用定位元素方法,并传递给该方法一个定位方式,定位值,元素名称,用户名,密码,弹出框内容 self.locateElementFirst(br,new_how,what,obj_name,data_list,second_how,second_what,first_oneOrMore,locate_method_data_sheet,row_col_number_list) elif old_how=='id': new_how=locate_method_dict['id'] #调用定位元素方法,并传递给该方法一个定位方式,定位值,元素名称,用户名,密码,弹出框内容 self.locateElementFirst(br,new_how,what,obj_name,data_list,second_how,second_what,first_oneOrMore,locate_method_data_sheet,row_col_number_list) elif old_how=='css': new_how=locate_method_dict["css"] if first_oneOrMore=='element': self.locateElementFirst(br,new_how,what,obj_name,data_list,second_how,second_what,first_oneOrMore,locate_method_data_sheet,row_col_number_list) elif first_oneOrMore=='elements': first_elements_index=int(locate_method_data_sheet.cell_value(row_col_number_list[0],row_col_number_list[1]+4)) self.locateElmentsFirst(br,new_how,what,first_elements_index,obj_name,data_list,second_how,second_what,first_oneOrMore,second_oneOrMore,locate_method_data_sheet,row_col_number_list) elif old_how=='xpath': new_how=locate_method_dict["xpath"] #调用定位元素方法,并传递给该方法一个定位方式,定位值,元素名称,用户名,密码,弹出框内容 self.locateElementFirst(br,new_how,what,obj_name,data_list,second_how,second_what,second_oneOrMore,locate_method_data_sheet,row_col_number_list)
# encoding:utf-8 from appium import webdriver from time import sleep from Data import get_number_by_data,ReadExcel zhuce_excelpath="F:\\Community_DD\\Data\\zhuce.xls" zhuce_sheet_name="zhuce_data" table=ReadExcel.ReadExcel().getTableBySheetName(zhuce_excelpath,zhuce_sheet_name) data_list=[table.cell_value(1,2),table.cell_value(1,3),table.cell_value(1,4),table.cell_value(1,5)] print data_list desired_caps={'platformName':'Android','platformVersion':'4.4','deviceName':'SM-G3608','appPackage':'com.dinghe.dingding.community','appActivity':'.SplashActivity'} driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) sleep(5) driver.find_element_by_id("com.dinghe.dingding.community:id/login_register").click() sleep(2) driver.find_element_by_id("com.dinghe.dingding.community:id/zcone_re2").click() sleep(2) driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'五行嘉园')]").click() sleep(2) driver.find_element_by_xpath("//android.widget.TextView[contains(@text,'666')]").click() sleep(2) driver.find_element_by_id("com.dinghe.dingding.community:id/zhuce_next1").click() sleep(2) # driver.find_element_by_id("com.dinghe.dingding.community:id/zcone_sfqr_Et1").send_keys(int(data_list[0])) # driver.find_element_by_xpath("//android.widget.EditText[contains(@index,'3')]").send_keys(int(data_list[1])) # driver.find_element_by_xpath("//android.widget.EditText[contains(@index,'7')]").send_keys(int(data_list[2])) # driver.find_element_by_xpath("//android.widget.EditText[contains(@index,'9')]").send_keys(int(data_list[3])) elements=driver.find_elements_by_class_name("android.widget.EditText") elements[0].send_keys("1") elements[1].send_keys("3")