def send_phone_number(self, number, text=""): doc = text + "输入手机号-" try: list = [] for i in number: if i == "1": self.driver.keyevent(8) elif i == "2": self.driver.keyevent(9) elif i == "3": self.driver.keyevent(10) elif i == "4": self.driver.keyevent(11) elif i == "5": self.driver.keyevent(12) elif i == "6": self.driver.keyevent(13) elif i == "7": self.driver.keyevent(14) elif i == "8": self.driver.keyevent(15) elif i == "9": self.driver.keyevent(16) elif i == "0": self.driver.keyevent(7) list.append(str(i)) num = "".join(list) UserLog().info(f"输入数字是{num}") except: UserLog().info("输入数字失败!") # 截图 self.save_screenshot(doc) raise
def ele_if_exist(self, locator): try: self.driver.find_element(*locator) UserLog().info(f"元素{locator}存在") return True except: UserLog().info(f"元素{locator}不存在") return False
def touch(self, x, y, doc=""): try: UserLog().info(f"点击坐标{(x, y)}") TouchAction(self.driver).tap(x=x, y=y).perform() except: UserLog().info("点击坐标失败!") # 截图 self.save_screenshot(doc) raise
def get_size(self, doc=""): try: size = self.driver.get_window_size() UserLog().info(f"当前手机屏幕尺寸是:{size}") return size except: UserLog().info("获取屏幕大小失败!") # 截图 self.save_screenshot(doc) raise
def get_elements(self, locator, doc=""): try: by = locator[0] value = locator[1] UserLog().info("定位方式:by." + by + "--->定位值:" + value) return self.driver.find_elements(*locator) except: UserLog().info("没有找到这些元素") # 截图 self.save_screenshot(doc) raise
def get_text(self, locator, doc=""): self.wait_eleVisible(locator, doc=doc) ele = self.get_element(locator, doc) UserLog().info(f"获取到的文本内容是:{ele.text}") # 输入操作 try: return ele.text except: UserLog().info("获取元素文本内容失败!") # 截图 self.save_screenshot(doc) raise
def click_elements(self, locator, index, doc=""): self.wait_eleVisible(locator, doc=doc) # 找元素 ele = self.get_elements(locator, doc)[index] UserLog().info(f"{doc}点击元素{locator}") try: # 元素操作 ele.click() except: UserLog().info("元素点击操作失败!") # 截图 self.save_screenshot(doc) raise
def swipe_down(self, size, doc=""): try: start_x = size["width"] * 0.5 start_y = size["height"] * 0.1 end_x = size["width"] * 0.5 end_y = size["height"] * 0.9 UserLog().info(f"上滑:从({start_x, start_y})--->({end_x, end_y})") # 向下滑动:X轴不变,Y轴从小到大。 self.driver.swipe(start_x, start_y, end_x, end_y, 200) except: UserLog().info("下滑失败!") # 截图 self.save_screenshot(doc) raise
class FindElement(object): def __init__(self, driver): self.driver = driver self.logger = UserLog() def find_element(self, key, index=None): by = key[0] value = key[1] self.logger.info("定位方式:" + by + "--->定位值:" + value) try: if by == "id": if index == None: return self.driver.find_element_by_id(value) else: return self.driver.find_elements_by_id(value)[index] elif by == "class_name": if index == None: return self.driver.find_element_by_class_name(value) else: return self.driver.find_elements_by_class_name(value)[index] elif by == "accessibility_id": if index == None: return self.driver.find_element_by_accessibility_id(value) else: return self.driver.find_elements_by_accessibility_id(value)[index] elif by == "android_uiautomator": if index == None: return self.driver.find_element_by_android_uiautomator(value) else: return self.driver.find_elements_by_android_uiautomator(value)[index] elif by == "xpath": if index == None: return self.driver.find_element_by_xpath(value) else: return self.driver.find_elements_by_xpath(value)[index] except Exception as e: print("没有找到这个元素") # 截图路保存径,绝对路径,也可以用相对路径 SCREENSHOTURL = error_image # 时间样式 ISOTIMEFORMAT = '%Y%m%d%H%M%S' # 寻找失败时自动截图至指定目录sreenshot,截图名称为调用方法名(测试用例名)+ 时间戳 + png后缀 self.driver.get_screenshot_as_file( SCREENSHOTURL + sys._getframe(1).f_code.co_name + '_' + time.strftime(ISOTIMEFORMAT, time.localtime( time.time())) + ".png") raise e
def get_elment_attribute(self, locator, attr, doc=""): ele = self.get_element(locator, doc) # 输入操作 try: return ele.get_attribute(attr) except: UserLog().info("获取元素的属性失败!") # 截图 self.save_screenshot(doc) raise
def wait_eleclickable(self, locator, times=30, poll_frequency=0.5, doc=""): try: UserLog().info(f"等待元素{locator}可点击") # 开始等待的时间 start_time = time.time() WebDriverWait(self.driver, times, poll_frequency).until( EC.element_to_be_clickable(locator)) # 结束等待的时间点 end_time = time.time() # 求一个差值,写在日志里 time_interval = ( datetime.datetime.fromtimestamp(end_time) - datetime.datetime.fromtimestamp(start_time)).seconds UserLog().info(f"等待时长为:{time_interval}") except: UserLog().info("等待元素可点击失败!") # 截图 self.save_screenshot(doc) raise
def save_screenshot(self, name): time1 = datetime.datetime.now().strftime('%Y-%m-%d') time2 = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') # 图片名称+模块名+页面名称+操作名称+时间.png file_Path = error_image + f"\\{time1}" if not os.path.exists(file_Path): os.makedirs(file_Path) file_name = file_Path + f"\\{time2}-{name}.png" self.driver.save_screenshot(file_name) UserLog().info(f"截取网页成功,文件路径为为:{file_name}")
def input_text(self, locator, text, doc=""): self.wait_eleVisible(locator, doc=doc) ele = self.get_element(locator, doc) try: # 输入操作 ele.send_keys(text) except: UserLog().info("元素输入操作失败!") # 截图 self.save_screenshot(doc) raise
def Purchase_limit_button(self, button, text=""): doc = text + f"点击【{button}】选项-" UserLog().info(f"点击【{button}】选项") if button == "不限购": self.click_element(PGCommon.Purchase_limit_no, doc=doc) elif button == "设置限购": self.click_element(PGCommon.Purchase_limit_yes, doc=doc) elif button == "无限期": self.click_element(PGCommon.Purchase_limit_no_day, doc=doc) else: self.click_element(PGCommon.Purchase_limit_yes_day, doc=doc)
def get_toastMsg(self, text, doc=""): # 1、xpath表达式 文本匹配 locator = '//*[contains(@text,"{}")]'.format(text) # 等待的时候,要用元素存在的条件。不能用元素可见的条件 try: self.wait_elePresence(locator) return self.get_element(locator).text except: UserLog().info("没有找到匹配的toast!!!!") # 截图 self.save_screenshot(doc) raise
def swipe_left(self, size, doc=""): try: start_x = size["width"] * 0.9 start_y = size["height"] * 0.5 end_x = size["width"] * 0.1 end_y = size["height"] * 0.5 # 左滑:Y轴不变,X轴从大到小。 self.driver.swipe(start_x, start_y, end_x, end_y, 200) except: UserLog().info("左滑失败!") # 截图 self.save_screenshot(doc) raise
def swipe_right(self, size, doc=""): try: start_x = size["width"] * 0.1 start_y = size["height"] * 0.5 end_x = size["width"] * 0.9 end_y = size["height"] * 0.5 # 右滑:Y轴不变,X轴从小到大。 self.driver.swipe(end_x, end_y, start_x, start_y, 200) except: UserLog().info("右滑失败!") # 截图 self.save_screenshot(doc) raise
def pay_password(self, text=""): doc = text + "输入支付密码-" try: self.driver.keyevent(8) self.driver.keyevent(9) self.driver.keyevent(10) self.driver.keyevent(11) self.driver.keyevent(12) self.driver.keyevent(13) except: UserLog().info("输入支付密码失败!") # 截图 self.save_screenshot(doc) raise
def Purchase_limit_button(self, button, text=""): if button == "不限购": number = 1 elif button == "设置限购": number = 2 elif button == "无限期": number = 3 else: number = 4 doc = text + f"点击【{button}】选项-" UserLog().info(f"点击【{button}】选项") new_locator = self.locator_by_text(PGCommon.Purchase_limit_button, number) self.click_element(new_locator, doc=doc)
def app_upload_image(self, choose_locator, ok_locator, doc=""): try: # 权限-始终允许 time.sleep(1) if self.ele_if_exist(Common.always_allowed): self.click_element(Common.always_allowed, doc=doc) # 选择图片 self.click_element(choose_locator) # 点击确定 self.click_element(ok_locator) except: UserLog().info("上传图片失败!") # 截图 self.save_screenshot(doc) raise
def send_pwd(self, text=""): doc = text + "输入密码-" try: # 输入密码 默认qaz123 self.driver.keyevent(45) self.driver.keyevent(29) self.driver.keyevent(54) self.driver.keyevent(8) self.driver.keyevent(9) self.driver.keyevent(10) except: UserLog().info("输入密码失败!") # 截图 self.save_screenshot(doc) raise
def web_upload_image(self, filepath, doc=""): try: # 一级窗口 dialog = win32gui.FindWindow("#32770", "打开") # 二级窗口 comboxex32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None) # 三级窗口 combox = win32gui.FindWindowEx(comboxex32, 0, "ComboBox", None) # 四级窗口 文本输入框 edit = win32gui.FindWindowEx(combox, 0, "Edit", None) # 打开按钮 二级窗口 button = win32gui.FindWindowEx(dialog, 0, "Button", "打开") # 输入文件路径 win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath) # 点击打开按钮 上传文件 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) except: UserLog().info("Web上传图片失败!") # 截图 self.save_screenshot(doc) raise
def limit_time(self, limit_time, text=""): doc = text + f"输入限购周期【{limit_time}】-" self.wait_eleVisible(PGCommon.limit_time, doc=doc) UserLog().info("输入的限购周期是:" + limit_time) self.input_text(PGCommon.limit_time, limit_time, doc=doc)
def limit_quantity(self, limit_quantity, text=""): doc = text + f"输入限购数量-" self.wait_eleVisible(PGCommon.limit_quantity, doc=doc) UserLog().info("输入的限购数量是:" + limit_quantity) self.input_text(PGCommon.limit_quantity, limit_quantity, doc=doc)
def subsist(self, subsist, text=""): doc = text + "预付款-" UserLog().info("输入预付款是:" + subsist) self.input_text(SG.subsist, subsist, doc=doc)
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time :2020/4/23 10:11 # @Author :春衫 # @File :calculation.py from Web.Common import Dividend from Web.Common.fengyong.Calculation.payment_method import PaymentMethod from Web.Common.fengyong.sql.wallet_detail import wallet_detail from Web.Common import DoExcel from Web.Common import test_data_path from Web.Common import UserLog my_logger = UserLog() test_data = DoExcel.get_data(test_data_path) class Calculation: def __init__(self, buyer_identity, seller_identity, buyer_province_proportion, buyer_city_proportion, buyer_area_proportion, buyer_personal_proportion, disanfang_province_proportion=None, disanfang_city_proportion=None, disanfang_area_proportion=None, disanfang_personal_proportion=None): '''
def send_search(self, good_name, text=""): doc = text + "搜索框-输入-" UserLog().info("搜索框-输入文字是:" + good_name) self.input_text(SearchGood.send_search, good_name, doc=doc) self.driver.keyevent(66) self.choose_first_good(good_name, text=doc)
def add_munber(self, munber, text=""): doc = text + "点击【购买数量】输入框-" time.sleep(0.5) UserLog().info("输入的商品数量是:" + munber) self.input_text(GD.add_amount, munber, doc=doc)
def limit_quantity(self, limit_quantity, text=""): doc = text + "限购数量-" UserLog().info("输入限购数量是:" + limit_quantity) self.input_text(SG.limit_quantity, limit_quantity, doc=doc)
def stock(self, stock, text=""): doc = text + "商品库存-" UserLog().info("输入商品库存是:" + stock) self.input_text(SG.stock, stock, doc=doc)