def web_login(driver, username, password): driver.find_element_by_xpath("//button[contains(text(),'登录')]").click() get_element(driver, ('id', "username")).send_keys(username) get_element(driver, ('id', "password")).send_keys(password) get_element(driver, ('id', "loginButton")).click() if is_element_present_3s(driver, ('id', "LAY_demo2"), '2'): assert get_element(driver, ('id', "LAY_demo2")).text == "成功:登录", "不在登陆页面,或者网速过慢,请重试" elif is_element_present_3s(driver, ('xpath', "//input[@placeholder='输入验证码']"), '2'): driver.find_element_by_xpath("//input[@placeholder='输入验证码']").send_keys('tttt') driver.find_element_by_id("loginButton").click() else: if is_element_present_3s(driver, ('id', "username"), '1'): driver.find_element_by_xpath("//button[contains(text(),'登录')]").click() get_element(driver, ('id', "username")).clear() get_element(driver, ('id', "username")).send_keys(username) get_element(driver, ('id', "password")).clear() get_element(driver, ('id', "password")).send_keys(password) get_element(driver, ('id', "loginButton")).click() if is_element_present_3s(driver, ('id', "LAY_demo2"), '2'): pass else: driver.get_screenshot_as_file(screenshot_path()) assert False, "登陆失败" if is_element_present_3s(driver, ('xpath', "//input[@placeholder='输入验证码']"), '2'): driver.find_element_by_xpath("//input[@placeholder='输入验证码']").send_keys('tttt') driver.find_element_by_id("loginButton").click()
def upload_and_delete_file(driver): file_type_list = ('xlsx', 'docx', 'pdf', 'png', 'pptx', 'zip', 'jpg') # 随机选取一个文件夹 file_type = random.choice(file_type_list) a = file_path(file_type) print(a) get_element(driver, ('xpath', "//input[@type='file']")).send_keys(a) element = "//p[contains(text(),'%s.%s')]" % (file_type, file_type) # 判断文件状态 assert is_element_present_3s(driver, ('xpath', element), 6), "上传%s文件失败" % file_type sleep(0.5) # 删除文件状态 if is_element_present_3s(driver, ('xpath', element)): # 右击文件 sleep(1) ActionChains(driver).context_click( get_element(driver, ('xpath', element))).perform() sleep(0.3) get_element(driver, ('xpath', "//a[contains(text(),'删除')]")).click() else: pass if is_element_present_3s(driver, ('xpath', element)): print('删除失败') assert False else: print('删除成功')
def operation_the_all_workflow(driver): # 全部通过工作流 prompt = None into_one_level(driver, '任务面板') sleep(1) into_one_level(driver, '我的任务') while True: if is_element_present_3s( driver, ('xpath', "//button[contains(text(),'请假工作流')]")): get_element( driver, ('xpath', "//button[contains(text(),'请假工作流')]")).click() elif is_element_present_3s( driver, ('xpath', "//button[contains(text(),'工件完成工作流')]"), 1): get_element( driver, ('xpath', "//button[contains(text(),'工件完成工作流')]")).click() elif is_element_present_3s( driver, ('xpath', "//button[contains(text(),'加班工作流')]"), 1): get_element( driver, ('xpath', "//button[contains(text(),'加班工作流')]")).click() elif is_element_present_3s( driver, ('xpath', "//button[contains(text(),'修正工人考勤异常')]"), 1): get_element( driver, ('xpath', "//button[contains(text(),'修正工人考勤异常')]")).click() else: prompt = '暂无工作流' print(prompt) if prompt == '暂无工作流': break else: get_element( driver, ('xpath', "//button[contains(text(),'全选')]/i")).click() get_element(driver, ('xpath', "//button[contains(text(),'通过')]")).click() get_element( driver, ('xpath', "//textarea[@placeholder='必填']")).send_keys('all') get_element(driver, ('xpath', "//a[contains(text(),'确定')]")).click() driver.refresh() sleep(1.5) get_element(driver, ('xpath', "//button[contains(text(),'所有')]")).click() if is_element_present_3s(driver, ('xpath', "//a[contains(text(),'详情')]")): pass else: break
def web_employee_registration(browser, name, mobile, password, company_name): # 企业员工注册 """ :param browser: :param name: :param mobile: :param password: :param company_name: :return: """ browser.find_element_by_xpath("//button[contains(text(),'注册')]").click() sleep(0.5) browser.find_element_by_xpath("//div[contains(text(),'企业员工')]").click() get_element(browser, ('xpath', "//input[@data-pattern-message='请输入正确的手机号码']")).send_keys(mobile) sleep(0.5) get_elements(browser, ('xpath', "//span[contains(text(),'点击获取验证码')]"))[0].click() if is_element_present_3s(browser, ('xpath', "//div[contains(text(),'此号码已经存在,无需注册')]"), 5): get_element(browser, ('id', 'username')).send_keys(get_mobile()) if is_element_present_3s(browser, ('xpath', "//input[@data-tip='请输入真实姓名']"), 4): get_element(browser, ('xpath', "//input[@placeholder='手机验证码']")).send_keys('11111') else: browser.find_element_by_xpath("//div[contains(text(),'企业员工')]").click() get_element(browser, ('xpath', "//input[@data-pattern-message='请输入正确的手机号码']")).send_keys(mobile) get_element(browser, ('xpath', "//input[@placeholder='短信校验码']")).clear() get_element(browser, ('xpath', "//input[@placeholder='短信校验码']")).send_keys('11111') get_element(browser, ('xpath', "//input[@data-tip='请输入真实姓名']")).send_keys(name) get_element(browser, ('id', "password1")).send_keys(password) get_element(browser, ('xpath', "//input[@data-tip='请再新输入密码']")).send_keys(password) get_element(browser, ('xpath', "//b[@role='presentation']")).click() get_element(browser, ('xpath', "//input[@class='select2-search__field' and @type='search']")).send_keys( company_name) sleep(0.5) get_element(browser, ('xpath', "//input[@class='select2-search__field' and @type='search']")).send_keys(Keys.ENTER) get_element(browser, ('xpath', "//input[@class='agree-input']")).click() get_element(browser, ('xpath', "//button[contains(text(),'创建账户')]")).click() sleep(0.5) a = get_element(browser, ('xpath', "//div[contains(text(),'成功:公司职员注册')]")).text if '成功:公司职员注册' == a: pass else: print("失败:公司职员注册") bug_photo(browser) assert False sleep(2) browser.find_element_by_xpath("//button[contains(text(),'登录')]").click() get_element(browser, ('id', "username")).send_keys(mobile) get_element(browser, ('id', "password")).send_keys(password) get_element(browser, ('id', "loginButton")).click()
def verify_worker_exists(driver, workers_name): # 平台运维验证工人是否存在 try: into_one_level(driver, '运维面板') sleep(0.5) into_two_level(driver, '注册用户管理') # 查询工人姓名 get_element( driver, ('xpath', "//input[@placeholder='工人姓名']")).send_keys(workers_name) # 搜索 get_element(driver, ('xpath', "//button[contains(text(),'搜索')]")).click() if is_element_present_3s(driver, ('xpath', "//tbody/tr/td[2]/a"), 3): get_element(driver, ('xpath', "//tbody/tr/td[2]/a")).click() sleep(1) role = get_element( driver, ('xpath', "//*[@id='basic']/div/div[2]/div[4]/div/span")).text print(role) assert role == '签约工人' else: print('签订终止合同工人的合同失败') assert False sleep(1.5) except Exception as e: print(e) bug_photo(driver) assert False
def handle_permissions_popovers(driver): if is_element_present_3s( driver, ('xpath', "//android.widget.TextView[@text='第 1 项权限(共 2 项)']")): get_element(driver, ('xpath', "//android.widget.Button[@text='允许']")).click() sleep(1) if is_element_present_3s( driver, ('xpath', "//android.widget.TextView[@text='第 2 项权限(共 2 项)']")): get_element( driver, ('xpath', "//android.widget.Button[@text='允许']")).click() else: pass else: pass
def agree_with_permissions(driver): # 小米处理权限的方式 全部允许 if is_element_present_3s(driver, ('id', 'android:id/button1'), 3): i = 0 while 1: get_element(driver, ('id', "android:id/button1")).click() sleep(1) if i == 3: break i += 1
def android_logout(driver): try: get_element(driver, ('id', 'com.zld.zld_face_rec_app:id/ll_account')).click() get_element( driver, ('id', 'com.zld.zld_face_rec_app:id/btn_sign_out')).click() get_element( driver, ('id', 'com.zld.zld_face_rec_app:id/tv_positive_btn')).click() assert is_element_present_3s( driver, ('id', 'com.zld.zld_face_rec_app:id/et_name')), '登出失败' except Exception as e: print(e)
def verify_real_name(driver, name, identity, path1, path2): """ :param driver: :param name: 姓名 :param identity: 身份证号 :param path1: 身份证正面路径 :param path2:身份证反面路径 :return: """ sleep(1) get_element(driver, ('id', 'dropdownMenu-set')).click() if is_element_present_3s(driver, ('xpath', "//a[contains(text(),'实名认证')]"), 2): sleep(1) get_element(driver, ('xpath', "//a[contains(text(),'实名认证')]")).click() else: pass if is_element_present( driver, ('xpath', "//button[@class='zdy-btn-blue reg-btn']")): sleep(4) get_element( driver, ('xpath', "//button[@class='zdy-btn-blue reg-btn']")).click() get_element(driver, ('xpath', "//input[@placeholder='真实姓名(必须填写)']")).clear() get_element( driver, ('xpath', "//input[@placeholder='真实姓名(必须填写)']")).send_keys(name) get_element(driver, ('xpath', "//input[@placeholder='身份证号(必须填写)']")).send_keys(identity) get_element(driver, ('id', "file1")).send_keys(path1) get_element(driver, ('id', "file2")).send_keys(path2) driver.find_element_by_xpath( "//button[contains(text(),'完成认证')]").click() sleep(5) if is_element_present(driver, ('xpath', "//a[contains(text(),'个人面板')]")): assert get_element(driver, ('id', 'dropdownMenu-set')).text == name, "认证失败" else: bug_photo(driver) assert False, "没跳转到实名认证后的页面" else: print("该用户已经实名认证")
def termination_of_the_contract(driver, workers_name): try: into_one_level(driver, '工程面板') sleep(0.5) into_two_level(driver, '工人管理') # 查询工人姓名 get_element( driver, ('xpath', "//div[@id='table-toolbar']/input")).send_keys(workers_name) # 搜索 get_element(driver, ('xpath', "//div[@id='table-toolbar']/button")).click() get_element(driver, ( 'xpath', "//a[contains(text(),'查看详情') and @class='table-a-link']")).click() get_elements( driver, ('xpath', "//a[contains(text(),'查看详情') and @class='table-a-link']" ))[1].click() sleep(1.5) get_element(driver, ('xpath', "//button[contains(text(),'合同终止')]")).click() get_element(driver, ('id', 'success')).click() assert get_element(driver, ('xpath', "//div[@id='LAY_demo2']")).text == '成功' sleep(3) get_element( driver, ('xpath', "//div[@id='table-toolbar']/input")).send_keys(workers_name) get_element(driver, ('xpath', "//div[@id='table-toolbar']/button")).click() sleep(1) if is_element_present_3s( driver, ('xpath', "//a[contains(text(),'查看详情') and @class='table-a-link']"), 2): assert False, '终止合同后,还可以搜到工人' else: pass except Exception as e: print(e) bug_photo(driver) assert False
def android_login(driver, username, password): try: get_element( driver, ('id', "com.zld.zld_face_rec_app:id/et_name")).send_keys(username) get_element( driver, ('id', "com.zld.zld_face_rec_app:id/et_pwd")).send_keys(password) get_element(driver, ('id', "com.zld.zld_face_rec_app:id/btn_login")).click() # 通过定位 点击第一个班组 sleep(2) driver.tap([(0, 231), (1080, 420)], 100) sleep(1) agree_with_permissions(driver) sleep(1) assert is_element_present_3s( driver, ('id', "com.zld.zld_face_rec_app:id/fl_message")), '登陆失败' except Exception as e: print(e) bug_photo(driver) assert False
def web_workman_register(browser, mobile, code, password): # 工人注册 """ :param browser: :param mobile: :param code: :param password: :return: """ try: browser.find_element_by_xpath("//button[contains(text(),'注册')]").click() sleep(1) get_element(browser, ('id', 'username')).send_keys(mobile) browser.find_element_by_xpath("//span[contains(text(),'点击获取验证码')]").click() new_mobile = get_mobile() if is_element_present_3s(browser, ('xpath', "//div[contains(text(),'此号码已经存在,无需注册')]"), 3): get_element(browser, ('id', 'username')).send_keys(new_mobile) browser.find_element_by_xpath("//span[contains(text(),'点击获取验证码')]").click() get_elements(browser, ('xpath', "//input[@placeholder='短信校验码']"))[0].send_keys(code) get_element(browser, ('id', "password")).send_keys(password) get_element(browser, ('id', 'repassword')).send_keys(password) sleep(1) get_element(browser, ('id', 'repassword')).click() get_element(browser, ('xpath', "//input[@class='agree-input']")).click() browser.find_element_by_xpath("//button[contains(text(),'创建账户')]").click() sleep(2) browser.find_element_by_xpath("//button[contains(text(),'登录')]").click() get_element(browser, ('id', "username")).send_keys(mobile) get_element(browser, ('id', "password")).send_keys(password) get_element(browser, ('id', "loginButton")).click() sleep(3) else: get_elements(browser, ('xpath', "//input[@placeholder='手机验证码']"))[0].send_keys(code) get_element(browser, ('id', "password")).send_keys(password) get_element(browser, ('id', 'repassword')).send_keys(password) sleep(1) get_element(browser, ('id', 'repassword')).click() get_element(browser, ('xpath', "//input[@class='agree-input']")).click() browser.find_element_by_xpath("//button[contains(text(),'创建账户')]").click() sleep(0.5) if is_element_present_3s(browser, ('xpath', "//span[@class='text-muted tel-tip' and contains(text(),'必须填写')]"), 2): get_element(browser, ('id', 'username')).clear() get_element(browser, ('id', 'username')).send_keys(mobile) get_elements(browser, ('xpath', "//input[@placeholder='短信校验码']"))[0].clear() get_elements(browser, ('xpath', "//input[@placeholder='短信校验码']"))[0].send_keys(code) get_element(browser, ('id', "password")).clear() get_element(browser, ('id', "password")).send_keys(password) get_element(browser, ('id', 'repassword')).clear() get_element(browser, ('id', 'repassword')).send_keys(password) sleep(0.5) get_element(browser, ('id', 'repassword')).click() sleep(0.1) browser.find_element_by_xpath("//button[contains(text(),'创建账户')]").click() sleep(2) browser.find_element_by_xpath("//button[contains(text(),'登录')]").click() get_element(browser, ('id', "username")).send_keys(mobile) get_element(browser, ('id', "password")).send_keys(password) get_element(browser, ('id', "loginButton")).click() return mobile except Exception as e: print(e) print("工人注册失败") assert False
def evaluation_of_worker(driver, workers_name, status='立即添加评价'): try: into_one_level(driver, '工程面板') sleep(0.5) into_two_level(driver, '工人管理') # 查询工人姓名 get_element( driver, ('xpath', "//div[@id='table-toolbar']/input")).send_keys(workers_name) # 搜索 get_element(driver, ('xpath', "//div[@id='table-toolbar']/button")).click() get_element(driver, ( 'xpath', "//a[contains(text(),'查看详情') and @class='table-a-link']")).click() get_elements( driver, ('xpath', "//a[contains(text(),'查看详情') and @class='table-a-link']" ))[1].click() sleep(1.5) if status == '立即添加评价': get_element(driver, ('xpath', "//button[contains(text(),'评价')]")).click() elif status == '修改评价': get_element( driver, ('xpath', "//button[contains(text(),'修改评价')]")).click() else: print('使用方法不正确') leavel = ('很差', '差', '一般', '好', '很好') level = [] for i in range(3): level.insert(i, random.choice(leavel)) # 技能水平 工作态度 团队精神 element = "//img[@title='%s']" % level[i] get_elements(driver, ('xpath', element))[i].click() if status == '立即添加评价': get_element(driver, ('xpath', "//textarea[@placeholder='请输入评价']")).send_keys('good') get_element(driver, ('xpath', "//button[contains(text(),'保存')]")).click() sleep(2) if is_element_present_3s(driver, ('xpath', "//p[contains(text(),'good')]"), 2): pass else: bug_photo(driver) assert False elif status == '修改评价': get_element(driver, ('xpath', "//textarea[@placeholder='请输入评价']")).clear() get_element( driver, ('xpath', "//textarea[@placeholder='请输入评价']")).send_keys('again good') get_element(driver, ('xpath', "//button[contains(text(),'保存')]")).click() sleep(2) if is_element_present_3s( driver, ('xpath', "//p[contains(text(),'again good')]"), 2): pass else: bug_photo(driver) assert False else: print('使用方法不正确') except Exception as e: print(e) bug_photo(driver) assert False
def edit_workers_contract(driver, workers_name, photo_path): try: into_one_level(driver, '工程面板') sleep(0.5) into_two_level(driver, '工人管理') # 查询工人姓名 get_element( driver, ('xpath', "//div[@id='table-toolbar']/input")).send_keys(workers_name) # 搜索 get_element(driver, ('xpath', "//div[@id='table-toolbar']/button")).click() get_element(driver, ( 'xpath', "//a[contains(text(),'合同详情') and @class='table-a-link']")).click() sleep(0.5) get_element(driver, ('xpath', "//button[contains(text(),'内容编辑')]")).click() if is_element_present_3s( driver, ('xpath', "//input[@placeholder='请输入正常出勤单价']"), 3): pass else: driver.refresh() if is_element_present( driver, ('xpath', "//button[contains(text(),'内容编辑')]")): sleep(1) get_element( driver, ('xpath', "//button[contains(text(),'内容编辑')]")).click() else: pass sleep(0.5) get_element(driver, ('xpath', "//input[@placeholder='请输入正常出勤单价']")).clear() sleep(0.5) new_unit_price = random.randint(1, 200) get_element( driver, ('xpath', "//input[@placeholder='请输入正常出勤单价']")).send_keys(new_unit_price) sleep(0.1) new_overtime_work = random.randint(1, 200) get_element(driver, ('xpath', "//input[@placeholder='请输入加班单价']")).clear() sleep(1) get_element( driver, ('xpath', "//input[@placeholder='请输入加班单价']")).send_keys(new_overtime_work) get_element(driver, ('xpath', "//textarea[@placeholder='选填']")).clear() assert_information = '验证数据' get_element( driver, ('xpath', "//textarea[@placeholder='选填']")).send_keys(assert_information) setting_input_time(driver) get_element( driver, ('xpath', "//input[@placeholder='选择日期不得大于分包合同结束日期']")).clear() get_element( driver, ('xpath', "//input[@placeholder='选择日期不得大于分包合同结束日期']")).send_keys( get_future_date(150)) get_element( driver, ('xpath', "//div[@id='uploadFile2']/input[1]")).send_keys(photo_path) sleep(3) get_element(driver, ('xpath', "//button[contains(text(),'完成')]")).click() assert is_element_present(driver, ('id', 'LAY_demo2')) sleep(7) until_price = "//span[contains(text(),'单价:%s元/小时')]" % new_unit_price print(until_price) assert is_element_present(driver, ('xpath', until_price)), "工人单价未更新" over_time = "//span[contains(text(),'加班工资:%s元/小时')]" % new_overtime_work assert is_element_present(driver, ('xpath', over_time)), "加班工资未更新" workers_information = "//span[contains(text(),'内容:%s')]" % assert_information assert is_element_present(driver, ('xpath', workers_information)), "工作内容未更新" workers_contract_time = "//div[@id='laborContract']/p[contains(text(),'1.用工日期从%s进场始至%s日止')]" % ( str(get_pass_dates(2)), str(get_future_date(150))) assert is_element_present( driver, ('xpath', workers_contract_time)), "工人合同时间未更新" except Exception as e: print(e) bug_photo(driver) assert False
def new_payroll(driver, payroll_name, money): # 薪资管理 try: into_one_level(driver, '工程面板') sleep(1) into_two_level(driver, '薪资管理') get_element(driver, ('xpath', "//button[@class='btn btn-primary']")).click() # 工程名称 get_element(driver, ('xpath', "//select[@id='kkkk']/option[2]")).click() # 输入工资月份 get_now_dates() setting_input_time(driver) r = r'\d{4}-\d{2}' text = re.findall(r, get_now_dates()) get_element( driver, ('xpath', "//input[@class='form-control form-n-y-1']")).send_keys(text) # 工资单名称 get_element(driver, ('id', 'createProllNameAll')).clear() sleep(0.2) get_element(driver, ('id', 'createProllNameAll')).send_keys(payroll_name) # 确定按钮 get_element( driver, ('xpath', "//button[@class='btn btn-primary proll-btn-com']")).click() sleep(1) # 增加最后一个人 get_elements(driver, ( 'xpath', "//div[@id='createrProll']/div[3]/div[1]/div[2]/div/div[1]/div/div/div/span[2]" ))[-1].click() sleep(0.5) get_element(driver, ('xpath', "//a[contains(text(),'移除')]")).click() sleep(1) if is_element_present_3s(driver, ('xpath', "//tr[1]/td[7]/input"), 3): print("移除失败") assert False else: pass get_elements(driver, ( 'xpath', "//div[@id='createrProll']/div[3]/div[1]/div[2]/div/div[1]/div/div/div/span[2]" ))[-1].click() get_element(driver, ('xpath', "//tr[1]/td[5]/a")).click() get_elements(driver, ('xpath', "//input[@class='form-control']"))[1].send_keys( get_bank_card_number()[2:18]) get_element(driver, ('xpath', "//button[contains(text(),'确定')]")).click() # 发放金额 get_element(driver, ('xpath', "//input[@class='pay-money']")).send_keys(money) sleep(3) get_element(driver, ('xpath', "//button[contains(text(),'保存')]")).click() sleep(0.5) get_element( driver, ('xpath', "//table[@id='project-proll-release']/tbody/tr[1]/td[7]/a[1]" )).click() assert is_element_present_3s(driver, ('xpath', "//input[@class='pay-money']"), 3), "保存失败" sleep(3) get_element(driver, ('xpath', "//button[contains(text(),'保存')]")).click() sleep(0.5) get_element( driver, ('xpath', "//table[@id='project-proll-release']/tbody/tr[1]/td[7]/a[2]" )).click() sleep(3) report = os.path.join(test_report_path(), payroll_name + '.xls') import win32com.client sleep(1) excel = win32com.client.gencache.EnsureDispatch('Excel.Application') sleep(0.1) wb = excel.Workbooks.Open(report) sleep(2) wb.SaveAs(report + 'x', FileFormat=51) wb.Close() excel.Application.Quit() # 删除旧的xls sleep(0.5) os.remove(report) new_report = os.path.join(test_report_path(), payroll_name + '.xlsx') wb1 = load_workbook(filename=new_report) sheets = wb1.get_sheet_names() # 获取所有的表格 print(sheets) sheets_first = sheets[0] # 获取第一个表 ws1 = wb1.get_sheet_by_name(sheets_first) print(ws1['F2'].value) assert money == ws1['F2'].value, "下载文件内容显示不正确" os.remove(new_report) except Exception as e: bug_photo(driver) print(e) assert False
def request_for_overtime(driver, remark, file_path): """ # 加班申请 :param driver: :param remark:备注信息 :param file_path: 附件路径 :return: """ into_one_level(driver, '任务面板') sleep(1) into_one_level(driver, '发起申请') get_element(driver, ('xpath', "//div[contains(text(),'加班申请')]")).click() get_element(driver, ('id', 'leaveAdd')).click() sleep(0.5) element = "//*[@id='lay-user-f']/tbody/tr" for i in range(0, len(get_elements(driver, ('xpath', element))), 2): elements = "//tr[@data-index='%s']/td/input" % i get_element(driver, ('xpath', elements)).click() sleep(0.1) get_element(driver, ('xpath', "//a[contains(text(),'确定')]")).click() setting_input_time(driver) get_elements(driver, ('xpath', "//div[@class='col-sm-6']/input"))[0].send_keys( get_now_dates()) get_element( driver, ('xpath', "//input[@placeholder='选择时间需小于加班结束时间']")).send_keys('20:00') get_element( driver, ('xpath', "//input[@placeholder='选择时间需大于加班开始时间']")).send_keys('21:00') get_element( driver, ('xpath', "//input[@placeholder='请输入加班费, 单位:元/小时']")).send_keys( random.randint(20, 50)) get_element( driver, ('xpath', "//textarea[@class='form-control']")).send_keys(remark) get_element( driver, ('xpath', "//div[@id='uploadFile']/input")).send_keys(file_path) get_element(driver, ('xpath', "//button[contains(text(),'提交申请')]")).click() get_element(driver, ('id', "success")).click() sleep(0.5) i = 1 while 1: if is_element_present_3s(driver, ('xpath', "//div[contains(text(),'创建失败')]")): sleep(1) get_element(driver, ( 'xpath', "//a[@class='layui-layer-ico layui-layer-close layui-layer-close1']" )).click() sleep(0.2) get_elements( driver, ('xpath', "//div[@class='col-sm-6']/input"))[0].clear() get_elements( driver, ('xpath', "//div[@class='col-sm-6']/input"))[0].send_keys( get_pass_dates(i)) i += 1 get_element( driver, ('xpath', "//button[contains(text(),'提交申请')]")).click() get_element(driver, ('id', "success")).click() sleep(0.5) if is_element_present_3s(driver, ('id', "LAY_demo2")): break else: break into_one_level(driver, '我的任务') get_element(driver, ('xpath', "//a[contains(text(),'我发起的')]")).click() try: sleep(0.5) get_element(driver, ('xpath', "//button[contains(text(),'加班工作流')]")).click() get_element( driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr[1]/td[8]/a")).click() assert_element = "//div[@class='tsk-inp col-xs-8' and contains(text(),'%s')]" % remark assert is_element_present(driver, ('xpath', assert_element)) except Exception as e: print(e) bug_photo(driver) assert False
def change_time_of_attendance(driver, remark, file_path, people_number): """ 1 代表单人, 2代表多人 """ try: into_one_level(driver, '任务面板') sleep(1) into_one_level(driver, '发起申请') get_element(driver, ('xpath', "//div[contains(text(),'考勤异常修改')]")).click() get_elements( driver, ('xpath', "//i[@class='glyphicon glyphicon-plus']"))[0].click() sleep(0.5) if people_number == 1: get_element(driver, ('id', "realname")).send_keys('曹永') get_element(driver, ('id', "realsearch")).click() get_elements( driver, ('xpath', "//input[@name='btSelectItem']"))[0].click() get_element(driver, ('xpath', "//a[contains(text(),'确定')]")).click() sleep(0.5) get_element(driver, ('xpath', "//div[@id='uploadFile']/input")).send_keys(file_path) element = "//input[@name='btSelectItem']" if people_number == 2: for i in range(0, len(get_elements(driver, ('xpath', element))), 2): elements = "//input[@name='btSelectItem']" get_elements(driver, ('xpath', elements))[i].click() sleep(0.1) get_element(driver, ('xpath', "//a[contains(text(),'确定')]")).click() setting_input_time(driver) get_element( driver, ('xpath', "//textarea[@class='form-control']")).send_keys(remark) get_elements(driver, ( 'xpath', "//input[@class='form-control input-sm form-date']"))[0].send_keys( get_pass_dates(1)) get_elements( driver, ('xpath', "//input[@class='form-control input-sm form-date-time2']" ))[0].send_keys('08:00') get_elements( driver, ('xpath', "//input[@class='form-control input-sm form-date-time2']" ))[1].send_keys('17:00') get_element(driver, ('xpath', "//button[contains(text(),'提交申请')]")).click() get_element(driver, ('id', "success")).click() sleep(0.5) # 工人个数 worker_number = 5 # 修改1天前的考勤异常 day_num = 1 while True: if is_element_present_3s( driver, ('xpath', "//div[contains(text(),'当前人员暂无考勤记录')]"), 2): print('考勤未生成昨天的数据,请查看定时任务是否开启') workers = random.sample(range(1, 15), worker_number) # 选择工人按钮 get_element( driver, ('xpath', "//button[@id='attendanceUpdateData']")).click() # 清空选择 get_element( driver, ('xpath', "//button[contains(text(),'清空选择')]")).click() if is_element_present_3s( driver, ('xpath', "//a[contains(text(),'›')]"), 1): # 滑动到最下面 get_elements( driver, ('xpath', "//a[contains(text(),'›')]"))[0].send_keys( Keys.DOWN) sleep(0.5) get_elements( driver, ('xpath', "//a[contains(text(),'›')]"))[0].click() for i in range(worker_number): get_elements(driver, ('xpath', element))[workers[i]].click() get_element(driver, ('xpath', "//a[contains(text(),'确定')]")).click() get_elements( driver, ('xpath', "//input[@class='form-control input-sm form-date']" ))[0].clear() get_elements( driver, ('xpath', "//input[@class='form-control input-sm form-date']" ))[0].send_keys(get_pass_dates(day_num)) day_num += 1 get_element( driver, ('xpath', "//button[contains(text(),'提交申请')]")).click() get_element(driver, ('id', "success")).click() sleep(0.5) else: break into_one_level(driver, '我的任务') get_element(driver, ('xpath', "//a[contains(text(),'我发起的')]")).click() sleep(1) get_element( driver, ('xpath', "//button[contains(text(),'修正工人考勤异常')]")).click() get_element( driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr[1]/td[8]/a")).click() assert_element = "//div[@class='tsk-inp col-xs-8' and contains(text(),'%s')]" % remark assert is_element_present(driver, ('xpath', assert_element)) except Exception as e: print(e) bug_photo(driver) assert False
def setting_attendance_machine(driver, attendance_machine_name, machine_type_id=1): """ :param driver: :param attendance_machine_name: 考勤机的名称 :param machine_type_id: 1 固定 2 移动 3 gps (目前2,3不支持) :return: """ into_one_level(driver, '工程面板') sleep(1) get_elements(driver, ('xpath', "//a[contains(text(),'设置')]"))[1].click() into_two_level(driver, '考勤机设置') # 增加考勤机 sleep(1) get_element(driver, ('xpath', "//button[contains(text(),'增加')]")).click() machine_type = "//*[@id='kqj-box']/form/div[1]/div/select/option[%d]" % machine_type_id get_element(driver, ('xpath', machine_type)).click() get_element( driver, ('xpath', "//div[@id='kqj-box']/form/div[4]/div/input")).send_keys('123456') get_element(driver, ('xpath', "//div[@id='kqj-box']/form/div[2]/div/input" )).send_keys(attendance_machine_name) sleep(1) # 工程区域 project_areas = len( get_elements( driver, ('xpath', "//*[@id='kqj-box']/form/div[3]/div/select/option"))) sleep(0.5) try: project_areas_elements = "//*[@id='kqj-box']/form/div[3]/div/select/option[%s]" % str( random.randint(1, project_areas - 2)) print(project_areas_elements) except Exception as e: print(e) bug_photo(driver) assert False, '工程区域点击无响应' get_element(driver, ('xpath', project_areas_elements)).click() if is_element_present_3s(driver, ('xpath', "//button[contains(text(),'选择位置')]"), 3): get_element(driver, ('xpath', "//button[contains(text(),'选择位置')]")).click() sleep(2) class_name = 'MozillaWindowClass' title_name = '杭州智链达建筑工人服务平台 - Mozilla FireFox' # 查找句柄 hwnd = win32gui.FindWindow(class_name, title_name) click_position(hwnd, 1299, 582) sleep(1.5) get_element(driver, ('xpath', "//a[@class='layui-layer-btn0']")).click() # 确定 get_element(driver, ('xpath', "//button[@class='btn btn-primary']")).click() element_len = "//*[@id='engineering-set-table']/tbody/tr" number = len(get_elements(driver, ('xpath', element_len))) title_list = [] if '添加成功' == get_element_3s(driver, ('id', "LAY_demo2"), 2).text: print('pass') else: bug_photo(driver) assert False for i in range(1, number + 1): name_elements = "//*[@id='engineering-set-table']/tbody/tr[%d]/td[1]/span" % i title_list.insert(i, get_element(driver, ('xpath', name_elements)).text) try: attendance_machine_name in title_list except Exception as e: print(e) bug_photo(driver) assert False # s删除考勤机 # 删除按钮 delete_element = "//*[@id='engineering-set-table']/tbody/tr[%d]/td[7]/a[2]" % len( get_elements(driver, ('xpath', element_len))) # 删除考勤机的名字 delete_element_name = "//*[@id='engineering-set-table']/tbody/tr[%d]/td[1]/span" % len( get_elements(driver, ('xpath', element_len))) # 考勤机的时候排序不正确,导致的异常 delete_name = get_element(driver, ('xpath', delete_element_name)).text get_element(driver, ('xpath', delete_element)).click() get_element(driver, ('id', 'success')).click() new_title_list = [] sleep(1) for i in range(1, len(get_elements(driver, ('xpath', element_len))) + 1): name_elements = "//*[@id='engineering-set-table']/tbody/tr[%d]/td[1]/span" % i new_title_list.insert( i, get_element(driver, ('xpath', name_elements)).text) if delete_name in new_title_list: assert False, print(delete_name) else: print('删除成功')
def test_add_company_information(self): web_login(self.browser, self.username, self.password) try: self.browser.find_element_by_xpath( "//button[contains(text(),'新增')]").click() # 资质专业 a = ['公路工程施工总承包资质', '铁路工程施工总承包资质', '港口与航道工程施工总承包资质', '地质专业'] self.browser.find_element_by_xpath( ".//*[@id='add-zizhi']/form/div[4]/input").send_keys( a[random.randint(0, 3)]) # 证书号码 self.browser.find_element_by_xpath( ".//*[@id='add-zizhi']/form/div[6]/input").send_keys( self.certificate_number) # 发证机关 c = '政府' self.browser.find_element_by_xpath( ".//*[@id='add-zizhi']/form/div[8]/input").send_keys(c) # 有效期 d = random.randint(1, 9) self.browser.find_element_by_xpath( "//input[@placeholder='年']").send_keys(d) # 复审时间 self.browser.find_element_by_xpath( "//input[@placeholder='选择日期不得早于今天']").click() self.browser.find_element_by_xpath( "html/body/div[5]/div[3]/table/tbody/tr[6]/td[7]/div").click() # 证书正面 get_element(self.browser, ('id', 'file1')).send_keys(self.file_path) # 证书反面 get_element(self.browser, ('id', 'file2')).send_keys(self.file_path) sleep(1) get_element(self.browser, ('xpath', "//button[contains(text(),'确认')]")).click() self.browser.refresh() new_elem = "//td[contains(text(),%s)]" % self.certificate_number sleep(0.5) select_companys_name = self.browser.find_elements_by_xpath( new_elem) certificate_number_list = [] j = 2 # 获取所有的证书号码 for i in range(int(len(select_companys_name) / 6)): certificate_number_list.insert( i, self.browser.find_elements_by_xpath(new_elem)[j].text) j += 6 print(certificate_number_list) assert self.certificate_number in certificate_number_list, "资质未增加成功" information_element = "//tr[@data-index='0']" sleep(0.5) self.browser.find_elements_by_xpath(information_element)[0].click() # 验证图片是否上传成功 if is_element_present_3s( self.browser, ('xpath', "//div[1]/img[@style='display: none;']"), 3): print("图片未上传成功") assert False else: pass # 删除证书 get_element(self.browser, ('xpath', "//button[contains(text(),'删除')]")).click() get_element(self.browser, ('id', "success")).click() assert is_element_present( self.browser, ('xpath', "//div[@id='LAY_demo2']")), "未弹出删除成功框" sleep(3) certificate_number_list_1 = [] j = 2 sleep(0.5) new_select_companys_name = self.browser.find_elements_by_xpath( new_elem) # 获取所有的证书号码 for i in range(int(len(new_select_companys_name) / 6)): certificate_number_list_1.insert( i, self.browser.find_elements_by_xpath(new_elem)[j].text) j += 6 print(certificate_number_list_1) if self.certificate_number in certificate_number_list_1: print("删除证书失败") assert False else: pass except Exception as e: print(e) bug_photo(self.browser) assert False