def place_order(self, isgift=True): """首页下单""" logging.info(format_str('place_order')) if isgift: sleep(0.5) self.add_gift() self.click(ORDER['下单']) self.click(ORDER['选择客户']) self.switch_to_native() # 切换到APP视图做swipe操作 self.swipe_up() # 上滑加载更多客户 sleep(3) self.switch_to_webview() # 切换到H5视图继续后面的操作 customers = self.find_elements(ORDER['客户']) # 获取客户列表 random.choice(customers).click() sleep(0.5) while True: if self.element_is_dispalyed(ORDER['侧边客户列表']): logging.warning('{:*^56}'.format(' 重新选择客户 ')) random.choice(customers).click() else: break self.click(ORDER['提交订单']) sleep(0.5) self.click(ORDER['下单二次确认']) sleep(0.5) self.click(ORDER['跳转订单列表'])
def free_refund(self): """自由退货""" logging.info(format_str('free_refund')) self.click(REFUND['自由退货']) self.add_product(random.randint(1, 3)) self.click(REFUND['下一步']) # sleep(0.5) self.click(ORDER['选择客户']) sleep(0.5) self.switch_to_native() # 切换到APP视图做swipe操作 self.swipe_up() # 上滑加载更多客户 sleep(3) self.switch_to_webview() # 切换到H5视图继续后面的操作 customers = self.find_elements(ORDER['客户']) # 获取客户列表 random.choice(customers).click() sleep(0.5) while True: if self.element_is_dispalyed(ORDER['侧边客户列表']): logging.warning('{:*^56}'.format(' 重新选择客户 ')) random.choice(customers).click() else: break self.click(REFUND['退货仓库']) sleep(0.5) warehouses = self.find_elements(PUBLIC['列表']) random.choice(warehouses).click() self.click(REFUND['下一步']) # sleep(0.5) self.click(REFUND['确定']) # sleep(0.5) self.click(REFUND['查看订单'])
def upload_photo(self, flag=None): """ 从相册选择文件上传 :param flag: 用来标识是否是企业微信,默认微信 """ logging.info(format_str('upload_photo')) for i in range(random.randint(1, 4)): self.click(PUBLIC['新增照片']) time.sleep(1) self.switch_to_native() # 切换到NATIVE_APP视图控制照片选择 if flag: self.click(PUBLIC['选择其他方式上传']) # 企业微信选择其他方式上传 self.click(PUBLIC['企业微信步骤二']) # 企业微信步骤二 else: self.click(PUBLIC['选择从文件上传']) # 微信选择从文件上传图片 time.sleep(1) photos = self.find_elements(PUBLIC['获取照片列表']) random.choice(photos).click() time.sleep(3) # 等待图片上传完成 self.switch_to_webview() # 切换到H5视图继续操作 time.sleep(0.5) if self.is_exists(PUBLIC['关闭按钮']): self.click(PUBLIC['关闭按钮'])
def add_product(self, kinds=1): """ 添加商品到购物车 :param kinds: 商品种类,默认为1 """ # 查看合计数量,如果数量不为0,先进购物车清空商品 content = self.find_element(ORDER['合计数量']).text if content[1] != '0': self.empty_cart() logging.info(format_str('add_product')) # 选择商品 sleep(0.5) big = self.find_elements(ORDER['大单位输入框']) # 获取所有大单位输入框 small = self.find_elements(ORDER['小单位输入框']) # 获取所有大单位输入框 if big: for k in range(kinds): sleep(1) _i = random.randint(1, len(big) - 1) big[_i].click() self.clear_and_sendkeys(ORDER['输入商品数量'], random.randint(0, 3)) self.click(ORDER['确认输入']) sleep(0.5) small[_i].click() self.clear_and_sendkeys(ORDER['输入商品数量'], random.randint(1, 3)) self.click(ORDER['确认输入']) sleep(1)
def clear_drafts(self): """清空草稿箱""" if self.element_is_dispalyed(PUBLIC['草稿箱角标']): logging.info(format_str('start clear drafts...')) self.click(PUBLIC['草稿箱']) self.click(PUBLIC['清空草稿箱']) self.click(PUBLIC['确定按钮']) self.return_home_page()
def choose_expense(self): """选择费用明细""" logging.info(format_str('choose_expense')) self.click(ACTIVITY['费用明细']) sleep(1) costs = self.find_elements(ACTIVITY['列表']) random.choice(costs).click() self.click(ACTIVITY['确定'])
def choose_activity(self): """选择活动""" logging.info(format_str('choose_activity')) self.click(ACTIVITY['活动']) sleep(1) acts = self.find_elements(ACTIVITY['列表']) random.choice(acts).click() sleep(1)
def open_qywx_ccloud(self): """企业微信进入'慧订货'""" logging.info(format_str('open_qywx_ccloud')) self.click(PUBLIC['工作台']) self.click(PUBLIC['慧订货']) self.switch_to_webview() # 切换到h5视图 self.choose_accout() self.clear_drafts()
def choose_activity_supplement_type(self, index): """进入营销补录并选择活动类型""" logging.info(format_str('choose_activity_supplement_type')) # 进入营销推广 self.click(ACTIVITY['营销补录']) sleep(0.5) self.find_elements(ACTIVITY['选择营销活动'])[index].click() sleep(1)
def batch_output(self): """APP批量出库""" logging.info(format_str('batch_outbound')) order_list = self.filter_order() if order_list: self.click(OUTPUT['批量出库']) sleep(1) self.click(OUTPUT['二次确认']) sleep(5) else: logging.warning('{:*^56}'.format(' 没有待出库的订单 '))
def new_customer(self, flag=None): """新增客户""" logging.info(format_str('new_customer')) self.click(CUSTOMER['新增客户']) sleep(0.5) subname = ['小店', '副食', '酒楼', '批发', '烟酒', '便利店', '小卖部', '超市', '百货'] customer_name = create_name() + random.choice(subname) self.clear_and_sendkeys(CUSTOMER['客户名'], customer_name) self.clear_and_sendkeys(CUSTOMER['联系人'], create_name()) self.clear_and_sendkeys(CUSTOMER['电话'], create_phone()) self.click(CUSTOMER['客户类型']) sleep(0.5) subtype = ['零售终端', '批发', '餐饮', '其他', '商超'] types = self.find_elements(CUSTOMER['列表']) while True: t = random.choice(types) if t.text in subtype: t.click() break sleep(0.5) self.click(CUSTOMER['客户等级']) sleep(0.5) rank = self.find_elements(CUSTOMER['列表']) random.choice(rank).click() # 选择配送地址 self.click(CUSTOMER['省市区']) self.switch_to_native() # 切换到APP视图做swipe操作,滑动选择省市区 width = self.driver.get_window_size().get('width') # 获取屏幕宽度 height = self.driver.get_window_size().get('height') # 获取屏幕高度 self.driver.swipe(width * 0.25, height * 0.9, width * 0.25, height * 0.1) self.driver.swipe(width * 0.9, height * 0.9, width * 0.9, height * 0.7) self.switch_to_webview() # 切换到H5视图继续后面的操作 self.click(CUSTOMER['完成']) self.clear_and_sendkeys(CUSTOMER['详细地址'], create_gbk(8)) if flag: for _ in range(random.randint(1, 3)): self.click(CUSTOMER['添加图片']) self.switch_to_native() # 切换到微信视图控制相机拍照 self.click(PUBLIC['拍照']) self.click(PUBLIC['确认照片']) sleep(3) # 等待图片上传完成 self.switch_to_webview() # 切换到H5视图继续操作 self.click(CUSTOMER['新增']) sleep(0.5) self.click(CUSTOMER['确定']) sleep(1)
def return_home_page(self): """返回首页""" logging.info(format_str('return_home_page')) time.sleep(2) if self.is_exists(PUBLIC['底部首页菜单']): self.click(PUBLIC['底部首页菜单']) elif self.is_exists(PUBLIC['悬浮图标']): self.click(PUBLIC['悬浮图标']) self.click(PUBLIC['返回首页']) else: self.click(PUBLIC['底部首页按钮'])
def single_output(self): """APP单个出库""" logging.info(format_str('single_output')) order_list = self.filter_order() if order_list: # 如果存在待出库的订单 order_list[0].click() # 点击第一个订单展开详情 sleep(0.5) self.click(OUTPUT['单个出库']) sleep(0.5) self.click(OUTPUT['确定']) else: logging.warning('{:*^56}'.format(' 没有待出库的订单 '))
def customer_visit_replenish(self, flag=None): """常规拜访-补录""" logging.info(format_str('customer_visit_replenish')) self.click(CUSTOMER['拜访补录']) self.clear_and_sendkeys(CUSTOMER['备注'], create_gbk(30)) # 添加备注信息 self.upload_photo(flag) # 添加照片 self.click(CUSTOMER['提交']) sleep(1) self.click(CUSTOMER['确定']) self.click(CUSTOMER['拜访完成']) self.click(CUSTOMER['确定'])
def customer_visit(self, flag=None): """常规拜访""" logging.info(format_str('customer_visit')) self.click(CUSTOMER['常规拜访']) self.clear_and_sendkeys(CUSTOMER['备注'], create_gbk(30)) self.take_photo(flag) self.click(CUSTOMER['提交']) sleep(1) self.click(CUSTOMER['确定']) self.click(CUSTOMER['拜访完成']) self.click(CUSTOMER['确定'])
def add_gift(self): """ 随机将购物车商品设为赠品 """ logging.info(format_str('add_gift')) if self.driver.title == '产品列表': self.click(ORDER['购物车']) # 获取所有的赠品框,随机勾选 if self.driver.title == '购物车': select_gift = self.find_elements(ORDER['勾选赠品']) random.choice(select_gift).click() self.click(ORDER['添加商品'])
def open_wechat_ccloud(self): """进入微信公众号'武汉珈研'里的订单云平台""" logging.info(format_str('open_wechat_ccloud')) # self.click(PUBLIC['武汉珈研']) m_list = self.find_elements(PUBLIC['消息列表']) for m in m_list: if m.text == '武汉珈研': m.click() break self.find_elements(PUBLIC['订单云平台'])[0].click() time.sleep(2) self.switch_to_webview() # 切换到H5视图 self.choose_accout()
def empty_cart(self): """ 清空购物车 """ logging.info(format_str('empty_cart')) if self.driver.title == '产品列表': self.click(ORDER['购物车']) # 通过循环删除购物车所有商品 if self.driver.title == '购物车': del_icons = self.find_elements(ORDER['删除商品']) for icon in del_icons: icon.click() self.click(ORDER['删除确认']) sleep(0.5) self.click(ORDER['添加商品'])
def submit_and_confirm(self): """提交活动""" logging.info(format_str('submit_and_confirm')) if self.is_exists(ACTIVITY['提交']): self.click(ACTIVITY['提交']) # 如果出现继续上传的提示,点击继续上传 if self.is_exists(ACTIVITY['继续上传']): self.click(ACTIVITY['继续上传']) sleep(5) self.click(ACTIVITY['提交']) else: self.click(ACTIVITY['营销提交']) self.click(ACTIVITY['确定']) sleep(2)
def choose_accout(self, name=None): """ 如果出现选账套页面,进入name账套,如果没指定name,默认选第一个 :param name: 账套名称 """ title = self.driver.title # 获取当前页面title if title == '选择用户': # 如果页面title是选择用户,说明是进入了选择账套页面 logging.info(format_str('choose_accout')) sets = self.find_elements(PUBLIC['账套列表']) if name: for s in sets: if s.text == name: s.click() return sets[0].click()
def groupon_activity(self, flag=None): """团购直销活动""" # 进入团购直销活动 self.choose_activity_type(1) logging.info(format_str('groupon_activity')) self.choose_activity() # 选择活动 self.choose_expense() # 选择费用明细 self.clear_and_sendkeys(ACTIVITY['单位名称'], create_gbk(5)) self.clear_and_sendkeys(ACTIVITY['联系人'], create_name()) self.clear_and_sendkeys(ACTIVITY['电话'], create_phone()) self.present_num() # 赠送数量 self.present_money() # 赠送金额 self.take_photo(flag) # 拍照上传 self.submit_and_confirm()
def cultivate_activity_supplement(self, flag=None): """消费培育活动-补录""" # 选择消费培育活动 self.choose_activity_supplement_type(0) logging.info(format_str('cultivate_activity_supplement')) self.choose_activity() # 选择活动 self.choose_expense() # 选择费用明细 self.clear_and_sendkeys(ACTIVITY['联系人'], create_name()) self.clear_and_sendkeys(ACTIVITY['电话'], create_phone()) self.clear_and_sendkeys(ACTIVITY['地址'], create_gbk(6)) self.clear_and_sendkeys(ACTIVITY['人数'], random.randint(1, 3)) self.present_num() # 赠送数量 self.present_money() # 赠送金额 self.upload_photo(flag) # 上传照片 self.submit_and_confirm() sleep(2)
def mashup_order(self, isgift=True): """聚合下单""" logging.info(format_str('mashup_order')) if isgift: sleep(0.5) self.add_gift() self.click(ORDER['下单']) sleep(1) self.click(ORDER['提交订单']) sleep(0.5) self.click(ORDER['下单二次确认']) sleep(1) self.click(ORDER['拜访完成']) sleep(0.5) self.click(ORDER['拜访完成二次确认'])
def activity_audit(self, flag=None): """ 活动审核 :param flag: True代表审核通过,False代表审核拒绝 """ self.click(AUDIT['活动审核']) if not self.is_exists(AUDIT['拒绝']): logging.warning('{:*^56}'.format(' 活动审核列表为空 ')) return if flag: self.audit_pass() else: logging.info(format_str('audit_refuse')) self.click(AUDIT['拒绝']) self.clear_and_sendkeys(AUDIT['备注'], create_gbk(10)) self.click(AUDIT['确认']) self.return_index()
def order_audit(self, flag=True): """ 订单审核 :param flag: True代表审核通过,False代表审核拒绝 """ self.click(AUDIT['订单审核']) if not self.is_exists(AUDIT['拒绝']): logging.warning('{:*^56}'.format(' 订单审核列表为空 ')) return if flag: self.audit_pass() else: logging.info(format_str('audit_refuse')) self.click(AUDIT['拒绝']) reasons = self.find_elements(AUDIT['订单拒绝理由']) random.choice(reasons).click() self.click(AUDIT['确认']) self.return_index()
def present_num(self): """赠送数量""" logging.info(format_str('present_num')) if self.is_exists(ACTIVITY['赠送数量']): # 非补录时数量输入框的id是apply_num1 if self.element_is_dispalyed(ACTIVITY['赠送数量']): available_num = int(self.get_text(ACTIVITY['可用数量'])[1:-1]) # 可用数量 if available_num <= 0: self.clear_and_sendkeys(ACTIVITY['赠送数量'], '0') else: self.clear_and_sendkeys(ACTIVITY['赠送数量'], random.randint(1, 5)) if self.is_exists(ACTIVITY['补录赠送数量']): # 非补录时数量输入框的id是apply_num1 if self.element_is_dispalyed(ACTIVITY['补录赠送数量']): available_num = int(self.get_text(ACTIVITY['可用数量'])[1:-1]) # 可用数量 if available_num <= 0: self.clear_and_sendkeys(ACTIVITY['补录赠送数量'], '0') else: self.clear_and_sendkeys(ACTIVITY['补录赠送数量'], random.randint(1, 5))
def take_photo(self, flag=None): """ 拍照上传 :param flag: 用来标识是否是企业微信,默认微信 """ logging.info(format_str('take_photo')) for i in range(random.randint(1, 5)): self.click(PUBLIC['新增照片']) time.sleep(1) self.switch_to_native() # 切换到NATIVE视图控制相机拍照 self.click(PUBLIC['拍照']) time.sleep(1) self.click(PUBLIC['确认照片']) if flag: self.click(PUBLIC['企业微信二次确认']) time.sleep(3) # 等待图片上传完成 self.switch_to_webview() # 切换到H5视图继续操作
def visit_audit(self, flag=True): """ 客户拜访审核 :param flag: True代表审核通过,False代表审核拒绝 """ self.click(AUDIT['拜访审核']) if not self.is_exists(AUDIT['拒绝']): logging.warning('{:*^56}'.format(' 拜访审核列表为空 ')) return if flag: self.audit_pass() else: logging.info(format_str('audit_refuse')) self.click(AUDIT['拒绝']) sel = self.find_element(AUDIT['拜访拒绝理由']) Select(sel).select_by_value(str(random.randint(1, 3))) self.clear_and_sendkeys(AUDIT['备注'], create_gbk(10)) self.click(AUDIT['确认']) self.return_index()
def order_refund(self): """订单退货""" logging.info(format_str('order_refund')) if not self.is_exists(REFUND['退货按钮']): for i in range(4): self.click(REFUND['日期筛选']) sleep(0.5) conditions = self.find_elements(PUBLIC['列表']) conditions[i].click() if self.is_exists(REFUND['退货按钮']): break if not self.is_exists(REFUND['退货按钮']): logging.warning('{:*^56}'.format(' 没有可退货的订单 ')) return self.click(REFUND['退货按钮']) self.click(REFUND['提交订单']) # sleep(0.5) self.click(REFUND['确定']) self.click(REFUND['否'])
def add_product(self, kinds): """ 添加商品到购物车 :param kinds: 商品种类,默认为1 """ logging.info(format_str('add_product')) big = self.find_elements(ORDER['大单位输入框']) # 获取所有大单位输入框 small = self.find_elements(ORDER['小单位输入框']) # 获取所有大单位输入框 for k in range(kinds): sleep(1) _i = random.randint(1, len(big) - 1) big[_i].click() self.clear_and_sendkeys(ORDER['输入商品数量'], random.randint(0, 3)) self.click(ORDER['确认输入']) sleep(0.5) small[_i].click() self.clear_and_sendkeys(ORDER['输入商品数量'], random.randint(1, 3)) self.click(ORDER['确认输入']) sleep(1)