def contract_workflow(driver, contract_name, information): """ :param information: 错误提示 :param driver: :param contract_name: 合同名称 :return: """ into_one_level(driver, '任务面板') sleep(0.5) into_two_level(driver, '我的任务') get_element( driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr[1]/td[8]/a")).click() get_element( driver, ('xpath', "//button[@class='btn btn-sm btn-success']")).click() get_element(driver, ('xpath', "//textarea")).send_keys('s') get_element(driver, ('xpath', "//a[@class='layui-layer-btn0']")).click() sleep(10) driver.find_element_by_xpath("//a[contains(text(),'我审核过的')]").click() sleep(2) contract_name += '签订审核' element_len = get_elements( driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) information += '签订失败' assert contract_name in title_text, "%s" % information
def workers_review(driver, worker_name): try: into_one_level(driver, "任务面板") sleep(0.5) into_two_level(driver, "我的任务") get_element(driver, ('xpath', "//button[contains(text(),'签订用工合同')]")).click() get_element( driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr[1]/td[9]/a")).click() get_element( driver, ('xpath', "//button[@class='btn btn-sm btn-success']")).click() get_element(driver, ('xpath', "//textarea")).send_keys('s') get_element(driver, ('xpath', "//a[@class='layui-layer-btn0']")).click() sleep(10) driver.find_element_by_xpath("//a[contains(text(),'我审核过的')]").click() sleep(2) worker_name += '用工合同签订审核' element_len = get_elements( driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) information = '用工合同签订失败' assert worker_name in title_text, "%s" % information except Exception as e: print(e) bug_photo(driver) assert False
def attendance_machine_login(driver): into_one_level(driver, '工程面板') sleep(1) get_elements(driver, ('xpath', "//a[contains(text(),'设置')]"))[1].click() into_two_level(driver, '考勤机设置') get_elements( driver, ('xpath', "//i[@class='glyphicon glyphicon-facetime-video']"))[0].click() # 得到selenium打开的浏览器的所有句柄 all_hand = driver.window_handles # 切换句柄 driver.switch_to_window(all_hand[-1]) get_element(driver, ('id', 'firstname')).clear() sleep(0.5) get_element(driver, ('id', 'firstname')).send_keys('hpface固定ipc测试') get_element(driver, ('id', 'lastname')).send_keys('123456') get_element(driver, ('xpath', "//button[@class='btn btn-primary']")).click() sleep(0.5) if get_element(driver, ('id', 'LAY_demo2')).text == '成功:订阅': pass else: bug_photo(driver) assert False driver.close() driver.switch_to_window(all_hand[0])
def upload_file_document_library(driver): # 台账管理,上传专项检查文件、 查看文件上传是否成功、 into_one_level(driver, '工程面板') sleep(1) into_two_level(driver, '台账管理') sleep(0.5) # 获取所有的文件夹 folder_number = len( get_elements( driver, ('xpath', "//div[@class='col-sm-2 text-center type-item']/p"))) # 文件夹的名称 for i in range(folder_number): folder_name = get_elements( driver, ('xpath', "//div[@class='col-sm-2 text-center type-item']/p"))[i].text print(folder_name) element = "//p[contains(text(),'%s')]" % folder_name get_element(driver, ('xpath', element)).click() if folder_name in ('考勤记录表', '工资单', '银行代发'): get_elements(driver, ( 'xpath', "//div[@class='col-sm-2 text-center type-item search-month-name']" ))[0].click() upload_and_delete_file(driver) driver.refresh() sleep(1)
def delete_area(driver): # 删除区域 into_one_level(driver, '工程面板') sleep(1) get_elements(driver, ('xpath', "//a[contains(text(),'设置')]"))[1].click() into_two_level(driver, '项目设置') # 区域个数 project_area_elements = "//div[@class='select-area-util-item select-area-util-area']" new_area_name = [] number = int(len(get_elements(driver, ('xpath', project_area_elements)))) for i in range(number): new_area_name.insert( i, get_elements(driver, ('xpath', project_area_elements))[i].text) project_element = "//div[@class='select-area-util-item select-area-util-area'and contains(text(),'%s')]" % \ new_area_name[number - 1] delete_project_element = project_element + "/div/div[3]" ActionChains(driver).move_to_element( get_element(driver, ('xpath', project_element))).perform() sleep(1) get_element(driver, ('xpath', delete_project_element)).click() get_element(driver, ('id', 'success')).click() sleep(2) new_number = int( len(get_elements(driver, ('xpath', project_area_elements)))) print(new_number, number) sleep(2) if number == int(new_number + 1): print('删除区域成功') else: bug_photo(driver) assert False
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 change_workman_contract_date(driver): try: now_date = get_future_date(90) into_one_level(driver, "任务面板") sleep(1) into_two_level(driver, "发起申请") get_element(driver, ('xpath', "//div[contains(text(),'用工合同期限修改')]")).click() get_elements( driver, ('xpath', "//input[@class='form-control input-sm']"))[0].click() get_element(driver, ('id', 'realname')).send_keys('曹永') get_element(driver, ('id', 'realsearch')).click() sleep(0.5) get_element( driver, ('xpath', "//*[@id='lay-user-f']/tbody/tr/td[1]/input")).click() get_element(driver, ('xpath', "//a[contains(text(),'确定')]")).click() sleep(0.5) setting_input_time(driver) get_element( driver, ('xpath', "//input[@placeholder='请选择日期']")).send_keys(now_date) get_element(driver, ('xpath', "//button[contains(text(),'提交申请')]")).click() get_element(driver, ('id', "success")).click() assert is_element_present(driver, ( 'xpath', "//div[contains(text(),'成功')]/i[@class='layui-layer-ico layui-layer-ico1' ]" )) except Exception as e: print(e) bug_photo(driver) assert False
def general_contract(driver, contract_name, contract_awarding, contracting, project_name): """ :param driver: :param contract_name:合同名称 :param contract_awarding: 发包方 :param contracting: 总承包方 :param project_name: 工程名称 :return: """ driver.implicitly_wait(5) try: into_one_level(driver, '任务面板') sleep(0.5) into_two_level(driver, '发起申请') # WebDriverWait(driver, 10).until(lambda x: x.find_element_by_xpath("//div[contains(text(),'新建总包合同')")).click() driver.find_element_by_xpath("//div[contains(text(),'新建总包合同')]").click() # get_element(driver, ('XPATH', "//div[contains(text(),'新建总包合同'")).click() sleep(0.5) driver.find_element_by_xpath("//input[@placeholder='请输入合同名称']").send_keys(contract_name) sleep(0.5) # 发包方 get_element(driver, ('id', 'select2-fbfName-container')).click() get_element(driver, ('xpath', "//input[@type='search']")).send_keys(contract_awarding) sleep(0.5) get_element(driver, ('xpath', "//input[@type='search']")).send_keys(Keys.ENTER) # 承包方 get_element(driver, ('id', "select2-cbfName-container")).click() driver.find_element_by_xpath("//input[@type='search']").send_keys(contracting) sleep(0.5) driver.find_element_by_xpath("//input[@type='search']").send_keys(Keys.ENTER) driver.find_element_by_xpath("//input[@placeholder='请输入工程名称']").send_keys(project_name) select_city(driver) driver.find_element_by_xpath("//input[@placeholder='请输入工程详细地址']").send_keys('南京路168号') driver.find_element_by_xpath("//input[@placeholder='类目(必填)']").send_keys('建筑') driver.find_element_by_xpath("//input[@placeholder='年份(必填)']").click() driver.find_element_by_xpath("//span[@class='year active']").click() driver.find_element_by_xpath("//input[@placeholder='编号(必填)']").send_keys(random.randint(10000, 99999)) project_information = '土方开挖,土方回填,钢筋工程,模板工程,混凝土工程,砌体工程,装饰装修工程等' contract_scope = "售楼部的美女,工程部的汉,项目部的光棍满街转!财务的花,预算的草,施工队的和尚到处跑!食堂的饭,宿舍的床,搞工程的女人吓死郎!" driver.find_elements_by_xpath("//textarea[@placeholder='必填']")[0].send_keys(project_information) driver.find_elements_by_xpath("//textarea[@placeholder='必填']")[1].send_keys(contract_scope) setting_input_time(driver) driver.find_element_by_xpath("//input[@placeholder='选择日期不得晚于计划竣工日期']").send_keys(get_now_dates()) driver.find_element_by_xpath("//input[@placeholder='选择日期不得早于今天']").send_keys(get_future_date(300)) driver.find_elements_by_xpath("//input[@placeholder='必填']")[0].send_keys(random.randint(100, 200)) driver.find_elements_by_xpath("//input[@placeholder='必填']")[1].send_keys(random.randint(100000, 999999)) driver.find_element_by_xpath("//input[@placeholder='请输入项目经理姓名']").send_keys("暂无") driver.find_element_by_xpath("//input[@placeholder='选择日期不得晚于当前日期']").send_keys(get_now_dates()) select_city_choice(driver) driver.find_elements_by_xpath("//input[@placeholder='必填']")[2].send_keys("南京路256号") driver.find_element_by_xpath("//button[@type='submit']").click() print(get_element(driver, ('id', "LAY_demo2")).text) assert get_element(driver, ('id', "LAY_demo2")).text == "成功" except Exception as e: print(e) bug_photo(driver) assert False
def camera_management(driver): into_two_level(driver, '设备管理') driver.find_element_by_xpath("//a[contains(text(),'摄像头')]").click() num = random_str(4) + str(random.randint(1000000, 9999999)) random_ip = "rtsp://" + "192.168.1.%d" % random.randint(1, 255) # 增加摄像头 driver.find_elements_by_xpath("//button[contains(text(),'新增')]")[3].click() get_element(driver, ('xpath', "//input[@placeholder='请输入摄像头设备号']")).send_keys(num) get_element(driver, ('xpath', "//option[contains(text(),'253112612')]")).click() camera_element = "//*[@id='sxt']/form/div[4]/select/option[%d]" % random.randint( 1, 2) get_element(driver, ('xpath', camera_element)).click() get_element( driver, ('xpath', "//input[@placeholder='请输入rtsp地址']")).send_keys(random_ip) driver.find_element_by_xpath("//button[contains(text(),'确认')]").click() get_elements( driver, ('xpath', "//input[@placeholder='请输入设备号筛选']"))[1].send_keys(num) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[3].click() assert str(num) == get_element( driver, ('xpath', "//*[@id='sxt-table']/tbody/tr[1]/td[2]")).text, "不在location中,新增失败" # 更新摄像头 get_element(driver, ('xpath', "//*[@id='sxt-table']/tbody/tr/td[6]/a")).click() num1 = random_str(4) + str(random.randint(1000000, 9999999)) get_element(driver, ('xpath', "//input[@placeholder='请输入摄像头设备号']")).clear() get_element(driver, ('xpath', "//input[@placeholder='请输入摄像头设备号']")).send_keys(num1) driver.find_elements_by_xpath("//button[contains(text(),'确认')]")[1].click() get_elements(driver, ('xpath', "//input[@placeholder='请输入设备号筛选']"))[1].clear() get_elements( driver, ('xpath', "//input[@placeholder='请输入设备号筛选']"))[1].send_keys(num1) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[3].click() assert str(num1) == get_element( driver, ('xpath', "//*[@id='sxt-table']/tbody/tr[1]/td[2]")).text, "不在location中,新增失败" # 删除闸机 get_element(driver, ('xpath', "//*[@id='sxt-table']/tbody/tr/td[1]")).click() get_elements(driver, ('xpath', "//button[contains(text(),'删除')]"))[3].click() get_elements(driver, ('xpath', "//button[contains(text(),'确认')]"))[2].click() get_element(driver, ('id', "success")).click() assert is_element_present(driver, ('xpath', "//td[@colspan='6']")), "删除闸机失败"
def add_team(driver, team_name): into_one_level(driver, '工程面板') sleep(1) into_two_level(driver, '组织构架') # 新增班组按钮 get_element(driver, ('xpath', "//button[@class='btn btn-primary btn-sm']")).click() sleep(1) get_elements(driver, ('xpath', "//input[@class='form-control input-sm']"))[2].clear() # 输入班组名称 get_elements(driver, ('xpath', "//input[@class='form-control input-sm']"))[2].send_keys(team_name) # 选择班组长 get_element(driver, ('xpath', "//*[@id='add-team']/form/div[3]/div/select/option[2]")).click() # 选择质量员 get_element(driver, ('xpath', "//*[@id='add-team']/form/div[4]/div/select/option[2]")).click() # 确定 get_element(driver, ('xpath', "//*[@id='add-team']/form/div[5]/div/button[1]")).click() sleep(1) team_name_element = "//div[contains(text(),'%s')]" % team_name if is_element_present(driver, ('xpath', team_name_element)): pass else: bug_photo(driver) print('新增班组失败') assert False # 修改班组 driver.find_element_by_xpath(team_name_element).click() get_element(driver, ('xpath', "//button[contains(text(),'修改班组')]")).click() new_team_name = getRandomName() sleep(1) get_elements(driver, ('xpath', "//input[@class='form-control input-sm']"))[2].clear() # 输入新的班组名称 get_elements(driver, ('xpath', "//input[@class='form-control input-sm']"))[2].send_keys(new_team_name) # 确定 get_element(driver, ('xpath', "//*[@id='add-team']/form/div[5]/div/button[1]")).click() sleep(1) new_team_name_element = "//div[contains(text(),'%s')]" % new_team_name if is_element_present(driver, ('xpath', new_team_name_element)): pass else: bug_photo(driver) print('新增班组失败') assert False get_element(driver, ('xpath', new_team_name_element)).click() get_element(driver, ('xpath', "//button[contains(text(),'删除班组')]")).click() get_element(driver, ('xpath', "//a[@class='layui-layer-btn0']")).click() sleep(1) if is_element_present(driver, ('xpath', team_name_element)): bug_photo(driver) print('新增班组失败') assert False else: pass
def subcontract(driver, project_name, labor_company, sub_contract, labor_people): """ :param driver: 驱动 :param project_name: 工程名称 :param labor_company: 劳务公司 :param sub_contract: 分包合同名称 :param labor_people: 劳务经理 :return: """ try: into_one_level(driver, '任务面板') sleep(0.5) into_two_level(driver, '发起申请') driver.find_element_by_xpath("//div[contains(text(),'新建分包合同')]").click() driver.find_element_by_xpath("//span[contains(text(),'输入工程名称')]").click() get_element(driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(project_name) sleep(0.5) get_element(driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(Keys.ENTER) sleep(1) driver.find_element_by_xpath("//span[contains(text(),'输入公司关键字查找')]").click() get_element(driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(labor_company) sleep(0.5) get_element(driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(Keys.ENTER) # 分包合同名称 get_elements(driver, ('xpath', "//input[@placeholder='必填']"))[0].send_keys(sub_contract) information = "地基与基础、建筑装饰装修、建筑幕墙、钢结构、机电设备安装、电梯安装、消防设施、建筑防水、防腐保温、园林古建筑、爆破与拆除、电信工程、管道工程等" get_element(driver, ('xpath', "//textarea[@placeholder='必填']")).send_keys(information) setting_input_time(driver) get_element(driver, ('xpath', "//input[@placeholder='选择日期不得晚于计划竣工日期']")).send_keys(get_now_dates()) get_element(driver, ('xpath', "//input[@placeholder='选择日期不得早于今天']")).send_keys(get_future_date(299)) driver.find_element_by_xpath("//span[contains(text(),'输入姓名查找')]").click() get_element(driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(labor_people) sleep(1) get_element(driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(Keys.ENTER) get_elements(driver, ('xpath', "//input[@placeholder='必填']"))[1].send_keys(random.randint(10000, 99999)) QA_standard(driver, random.randint(0, 1)) remuneration_pay(driver, random.randint(0, 1)) the_contract_comes_into_effect(driver, random.randint(0, 1)) material_equipment_management(driver, random.randint(0, 1)) sub_insurance(driver, random.randint(0, 1)) dispute_resolution(driver, random.randint(0, 1)) laws_and_regulations(driver, random.randint(0, 1)) sleep(0.5) driver.find_element_by_xpath("//button[contains(text(),'完成')]").click() print(get_element(driver, ('id', "LAY_demo2")).text) assert get_element(driver, ('id', "LAY_demo2")).text == "成功" except Exception as e: print(e) bug_photo(driver) assert False
def project_delay(driver): try: into_one_level(driver, '工程面板') sleep(1) get_elements(driver, ('xpath', "//a[contains(text(),'设置')]"))[1].click() into_two_level(driver, '项目设置') sleep(0.5) get_element(driver, ('xpath', "//button[contains(text(),'项目延期')]")).click() sleep(1) num = 300 setting_input_time(driver) get_element( driver, ('xpath', "//input[@placeholder='选择日期需大于原总包合同结束时间']")).send_keys( get_future_date(num)) get_element(driver, ('xpath', "//button[contains(text(),'提交申请')]")).click() sleep(0.5) get_element(driver, ('id', 'success')).click() while 1: if is_element_present( driver, ('xpath', "//div[contains(text(),'延期时间必须大于总包合同的竣工日期')]")): sleep(0.1) get_element(driver, ('xpath', "//span[@class='layui-layer-setwin']/a")).click() get_element( driver, ('xpath', "//input[@placeholder='选择日期需大于原总包合同结束时间']")).clear() num += 20 get_element( driver, ('xpath', "//input[@placeholder='选择日期需大于原总包合同结束时间']")).send_keys( get_future_date(num)) get_element( driver, ('xpath', "//button[contains(text(),'提交申请')]")).click() sleep(0.5) get_element(driver, ('id', 'success')).click() else: break except Exception as e: print(e) bug_photo(driver) assert False
def brake_machine(driver): into_two_level(driver, '设备管理') driver.find_element_by_xpath("//a[contains(text(),'闸机')]").click() num = random_str(4) + str(random.randint(1000000, 9999999)) random_ip = "192.168.1.%d" % random.randint(1, 255) # 增加闸机 driver.find_elements_by_xpath("//button[contains(text(),'新增')]")[2].click() get_element(driver, ('xpath', "//input[@placeholder='请输入闸机设备号']")).send_keys(num) get_element(driver, ('xpath', "//option[contains(text(),'hpface联调闸机')]")).click() get_element( driver, ('xpath', "//input[@placeholder='请输入闸机IP']")).send_keys(random_ip) driver.find_element_by_xpath("//button[contains(text(),'确认')]").click() get_element(driver, ('xpath', "//input[@placeholder='请输入设备号筛选']")).send_keys(num) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[2].click() assert str(num) == get_element( driver, ('xpath', "//*[@id='zj-table']/tbody/tr[1]/td[2]")).text, "不在location中,新增失败" # 更新闸机 get_element(driver, ('xpath', "//*[@id='zj-table']/tbody/tr/td[5]/a")).click() num1 = random_str(4) + str(random.randint(1000000, 9999999)) get_element(driver, ('xpath', "//input[@placeholder='请输入闸机号码']")).clear() get_element(driver, ('xpath', "//input[@placeholder='请输入闸机号码']")).send_keys(num1) driver.find_elements_by_xpath("//button[contains(text(),'确认')]")[1].click() get_element(driver, ('xpath', "//input[@placeholder='请输入设备号筛选']")).clear() get_element(driver, ('xpath', "//input[@placeholder='请输入设备号筛选']")).send_keys(num1) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[2].click() assert str(num1) == get_element( driver, ('xpath', "//*[@id='zj-table']/tbody/tr[1]/td[2]")).text, "不在location中,新增失败" # 删除闸机 get_element(driver, ('xpath', "//*[@id='zj-table']/tbody/tr/td[1]")).click() get_elements(driver, ('xpath', "//button[contains(text(),'删除')]"))[2].click() get_elements(driver, ('xpath', "//button[contains(text(),'确认')]"))[2].click() get_element(driver, ('id', "success")).click() assert is_element_present(driver, ('xpath', "//td[@colspan='5']")), "删除闸机失败"
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 setting_area(driver, area_name): ''' :param driver: :param area_name: 区域名称 :return: ''' # 增加区域 into_one_level(driver, '工程面板') sleep(1) get_elements(driver, ('xpath', "//a[contains(text(),'设置')]"))[1].click() into_two_level(driver, '项目设置') # 增加区域 get_element(driver, ('xpath', "//div[contains(text(),'添加区域 ')]")).click() sleep(1) class_name = 'MozillaWindowClass' title_name = '杭州智链达建筑工人服务平台 - Mozilla FireFox' # 查找句柄 hwnd = win32gui.FindWindow(class_name, title_name) click_position(hwnd, 146, 177) sleep(8) get_element(driver, ('xpath', "//button[contains(text(),'开始描点')]")).click() click_position(hwnd, 673, 453) sleep(0.5) click_position(hwnd, 1158, 468) sleep(0.5) click_position(hwnd, 701, 700) sleep(0.5) get_element(driver, ('xpath', "//button[contains(text(),'停止描点')]")).click() # 区域名称 get_element( driver, ('xpath', "//textarea[@name='area-name']")).send_keys(area_name) get_element(driver, ('xpath', "//button[contains(text(),'保存')]")).click() get_element(driver, ('id', 'success')).click() project_area_elements = "//div[@class='select-area-util-item select-area-util-area']" area_names = [] for i in range(len(get_elements(driver, ('xpath', project_area_elements)))): area_names.insert( i, get_elements(driver, ('xpath', project_area_elements))[i].text) try: area_name in area_names except Exception as e: print(e) bug_photo(driver) assert False project_element = "//div[@class='select-area-util-item select-area-util-area'and contains(text(),'%s')]" % area_name # 鼠标悬停在元素上面 ActionChains(driver).move_to_element( get_element(driver, ('xpath', project_element))).perform() # 修改区域 update_project_element = project_element + "/div/div[2]" sleep(1) get_element(driver, ('xpath', update_project_element)).click() click_position(hwnd, 146, 177) sleep(1) get_element(driver, ('xpath', "//button[contains(text(),'开始描点')]")).click() click_position(hwnd, 638, 460) get_element(driver, ('xpath', "//button[contains(text(),'保存')]")).click() get_element(driver, ('id', 'success')).click() sleep(0.5) try: '成功' == get_element( driver, ('xpath', "//div[@class='layui-layer-content layui-layer-padding']")).text except Exception as e: print(e) bug_photo(driver) assert False sleep(1) into_two_level(driver, '考勤机设置') attendance_machine_area_names = get_attendance_machine_area_name(driver) try: area_name in attendance_machine_area_names except Exception as e: print(e) print('增加区域后,没有增加GPS、移动人脸考勤机') 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 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 workman_contract_piece(driver, artifact_name, people): try: into_one_level(driver, "任务面板") sleep(1) into_two_level(driver, "发起申请") get_element(driver, ('xpath', "//div[contains(text(),'新建用工合同')]")).click() get_element(driver, ('xpath', "//span[contains(text(),'计件工人用工合同')]")).click() project_element = "//select[@id='reproject-name']/option[2]" get_element(driver, ('xpath', project_element)).click() get_element(driver, ('xpath', "//*[@id='reproject-team']/option[2]")).click() get_elements( driver, ('xpath', "//input[@placeholder='必填']"))[0].send_keys(artifact_name) address = ['上海', '北京', '广州', '杭州', '无锡', '苏州', '徐州'] get_elements(driver, ('xpath', "//input[@placeholder='必填']"))[1].send_keys( address[random.randint(0, len(address))]) get_elements(driver, ('xpath', "//input[@placeholder='必填']"))[2].send_keys( random.randint(88, 188)) get_elements(driver, ('xpath', "//input[@placeholder='必填']"))[3].send_keys( random.randint(199, 399)) get_element( driver, ('xpath', "//textarea[@placeholder='选填']")).send_keys('优秀的完成') # 选择工种 work_type = "//*[@id='work-type']/option" work_type_element = "//*[@id='work-type']/option[%d]" % random.randint( 2, len(work_type)) get_element(driver, ('xpath', work_type_element)).click() setting_input_time(driver) get_element(driver, ('id', 'select2-piece-worker-Name-container')).click() get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(people) sleep(0.5) get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys( Keys.ENTER) get_elements( driver, ('xpath', "//input[@placeholder='必填']"))[4].send_keys('08:30') get_elements( driver, ('xpath', "//input[@placeholder='必填']"))[5].send_keys('17:30') get_element( driver, ('xpath', "//input[@placeholder='小于用工合同结束日期' ]")).send_keys( get_pass_dates(2)) get_element( driver, ('xpath', "//input[@placeholder='选择日期不得大于分包合同结束日期']")).send_keys( get_future_date(180)) get_elements(driver, ('xpath', "//input[@placeholder='必填']"))[6].send_keys( random.randint(1, 30)) get_element(driver, ('xpath', "//button[contains(text(),'完成')]")).click() assert is_element_present(driver, ( 'xpath', "//div[contains(text(),'成功')]/i[@class='layui-layer-ico layui-layer-ico1' ]" )) except Exception as e: print(e) bug_photo(driver) assert False
def attendance_machine(driver, people): global name1_text into_two_level(driver, '设备管理') driver.find_element_by_xpath("//a[contains(text(),'考勤卡')]").click() name_text = [] num = random.randint(100000, 999999) driver.find_element_by_xpath("//button[contains(text(),'新增')]").click() get_element( driver, ('xpath', "//input[@placeholder='请输入4-10位考勤卡号']")).send_keys(num) get_element( driver, ('xpath', "//span[@class='select2-selection__placeholder']")).click() get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(people) sleep(0.5) get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys( Keys.ENTER) driver.find_element_by_xpath("//button[contains(text(),'确定')]").click() if is_element_present(driver, ('xpath', "//div[contains(text(),'该用户已绑定考勤卡')]")): # 解绑考勤卡 sleep(7) get_element(driver, ('xpath', "//input[@placeholder='请输入考勤卡号或姓名筛选']")).send_keys(people) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[0].click() for i in range( len( get_elements(driver, ('xpath', "//*[@id='kqk-table']/tbody/tr"))), 0, -1): unbind_element = "//*[@id='kqk-table']/tbody/tr[%d]/td[4]/a" % i get_element(driver, ('xpath', unbind_element)).click() get_element( driver, ('xpath', "//*[@id='k']/form/div[4]/button[3]")).click() assert is_element_present( driver, ('xpath', "//i[@class='layui-layer-ico layui-layer-ico1']")), "解绑考勤卡失败" sleep(0.5) # 输入空格 查看全部 get_element(driver, ('xpath', "//input[@placeholder='请输入考勤卡号或姓名筛选']")).clear() get_element( driver, ('xpath', "//input[@placeholder='请输入考勤卡号或姓名筛选']")).send_keys(' ') sleep(0.5) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[0].click() driver.find_element_by_xpath("//button[contains(text(),'新增')]").click() get_element( driver, ('xpath', "//input[@placeholder='请输入4-10位考勤卡号']")).send_keys(num) get_element( driver, ('xpath', "//span[@class='select2-selection__placeholder']")).click() get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(people) sleep(0.5) get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys( Keys.ENTER) driver.find_element_by_xpath("//button[contains(text(),'确定')]").click() if is_element_present( driver, ('xpath', "html/body/div[1]/div[1]/div/div[2]/div[2]/div/div[1]/div[2]/div[2]/div[2]/div[4]/div[2]/ul/li[1]/a" )): get_element(driver, ( 'xpath', "html/body/div[1]/div[1]/div/div[2]/div[2]/div/div[1]/div[2]/div[2]/div[2]/div[4]/div[2]/ul/li[1]/a" )).click() sleep(0.5) element_len = get_elements(driver, ('xpath', "//*[@id='kqk-table']/tbody/tr")) for i in range(1, len(element_len) + 1): element = "//*[@id='kqk-table']/tbody/tr[%d]/td[2]" % i name_text.insert(i, get_element(driver, ('xpath', element)).text) assert str(num) in name_text, "考勤卡添加失败1" else: element_len_now = get_elements( driver, ('xpath', "//*[@id='kqk-table']/tbody/tr")) for i in range(1, len(element_len_now)): element = "//*[@id='kqk-table']/tbody/tr[%d]/td[2]" % i name_text.insert(i, get_element(driver, ('xpath', element)).text) assert str(num) in name_text, "考勤卡添加失败2" name1_text = [] for h in range( 1, len( get_elements(driver, ('xpath', "//*[@id='kqk-table']/tbody/tr"))) + 1): element = "//*[@id='kqk-table']/tbody/tr[%d]/td[3]" % h if get_element(driver, ('xpath', element)).text != '-': name1_text.insert(h, get_element(driver, ('xpath', element)).text) if is_element_present( driver, ('xpath', "html/body/div[1]/div[1]/div/div[2]/div[2]/div/div[1]/div[2]/div[2]/div[2]/div[4]/div[2]/ul/li[4]/a" )): get_element(driver, ( 'xpath', "html/body/div[1]/div[1]/div/div[2]/div[2]/div/div[1]/div[2]/div[2]/div[2]/div[4]/div[2]/ul/li[4]/a" )).click() sleep(0.5) sleep(1) get_element(driver, ('xpath', "//input[@placeholder='请输入考勤卡号或姓名筛选']")).send_keys( str(name1_text[0])) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[0].click() assert name1_text[0] == get_element( driver, ('xpath', "//*[@id='kqk-table']/tbody/tr/td[3]")).text, "考勤卡筛选成功,or 筛选失败" # 解绑考勤卡 get_element(driver, ('xpath', "//input[@placeholder='请输入考勤卡号或姓名筛选']")).clear() get_element( driver, ('xpath', "//input[@placeholder='请输入考勤卡号或姓名筛选']")).send_keys(num) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[0].click() get_element( driver, ('xpath', "//*[@id='kqk-table']/tbody/tr/td[1]/input")).click() sleep(0.5) driver.find_elements_by_xpath("//button[contains(text(),'删除')]")[0].click() get_elements(driver, ('xpath', "//button[contains(text(),'确定')]"))[3].click() get_element(driver, ('id', 'success')).click() if is_element_present( driver, ('xpath', "//div[contains(text(),'考勤卡不存在或无法删除已经绑定用户的考勤卡,请重新选择用户,或者先解绑')]")): sleep(7) try: # get_element(driver, ('xpath', "//button[contains(text(),'取消')]")).click() get_element( driver, ('xpath', "//*[@id='kqk-table']/tbody/tr/td[4]/a")).click() get_element( driver, ('xpath', "//*[@id='k']/form/div[4]/button[3]")).click() get_element(driver, ('xpath', "//*[@id='kqk-table']/tbody/tr/td[1]/input")).click() get_elements( driver, ('xpath', "//button[contains(text(),'删除')]"))[0].click() get_elements( driver, ('xpath', "//button[contains(text(),'确定')]"))[3].click() get_element(driver, ('id', 'success')).click() except Exception as e: bug_photo(driver) print(e) assert is_element_present(driver, ('id', "LAY_demo2")), "删除考勤卡失败"
def approve_workflow(driver, task_type, many_people=1): into_one_level(driver, '任务面板') sleep(0.5) into_two_level(driver, '我的任务') sleep(1) if task_type == '修改总包合同结束时间': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '工件完成工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '请假工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '加班工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '修正工人考勤异常': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '修改用工合同结束时间': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() # 点击详情 if many_people == 1: try: get_element(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr[1]/td[9]/a")).click() sleep(1) # 点击通过 get_element(driver, ('xpath', "//button[@class='btn btn-sm btn-success']")).click() # 输入备注 get_element(driver, ('xpath', "//textarea")).send_keys('s') # 点击确定 get_element(driver, ('xpath', "//a[@class='layui-layer-btn0']")).click() except Exception as e: print(e) bug_photo(driver) assert False elif many_people == 2: get_element(driver, ('xpath', "//i[@class='glyphicon']")).click() sleep(1) get_element(driver, ('xpath', "//button[contains(text(),'通过')]")).click() get_element(driver, ('xpath', "//textarea[@placeholder='必填']")).send_keys('ss') get_element(driver, ('xpath', "//a[contains(text(),'确定')]")).click() sleep(4) get_element(driver, ('xpath', "//a[contains(text(),'我审核过的')]")).click() sleep(3) if task_type == '修改总包合同结束时间': contract_name = '关于浙江如舞亚更工程的总包合同结束时间修改审核' element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)+1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) task_type += '签订失败' assert contract_name in title_text, "%s" % task_type elif task_type == '工件完成工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() contract_name = '测试工件完成审核', '123完成审核' sleep(0.5) element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)+1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) task_type += '签订失败' if contract_name[0] in title_text: pass elif contract_name[1] in title_text: pass else: print(task_type) assert False # 请假工作流 elif task_type == '请假工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() try: if many_people == 2: time_of_duration = '0 天 0 时 1 分', '0 天 0 时 0 分', '0 天 0 时 2 分' for i in range(1, 4): element = "//*[@id='task-mytask-table']/tbody/tr[%s]/td[7]" % 1 time_text = get_element(driver, ('xpath', element)).text sleep(0.5) print(time_text, '', time_of_duration) assert time_text in time_of_duration elif many_people == 1: get_elements(driver, ('xpath', "//a[@class='table-a-link']"))[0].click() sleep(1) text = get_elements(driver, ('xpath', "//div[@class='tsk-inp col-xs-8']"))[3].text contract_name = '曹永,', '李嘉鑫,', '吕心泳,' assert text in contract_name, '我审核的没有数据' + text except Exception as e: print(e) bug_photo(driver) assert False # 加班工作流 elif task_type == '加班工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() time_of_duration = '0 天 0 时 1 分', '0 天 0 时 0 分', '0 天 0 时 2 分' element = "//*[@id='task-mytask-table']/tbody/tr[%s]/td[7]" % 1 time_text = get_element(driver, ('xpath', element)).text sleep(0.5) print(time_text, 'in', time_of_duration) assert time_text in time_of_duration, time_text + 'not_in' + time_of_duration # 修正工人考勤异常 elif task_type == '修正工人考勤异常': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() if many_people == 1: get_elements(driver, ('xpath', "//a[@class='table-a-link']"))[0].click() sleep(1) text = get_elements(driver, ('xpath', "//div[@class='tsk-inp col-xs-8']"))[3].text contract_name = '曹永', '李嘉鑫', '吕心泳' assert text in contract_name, '我审核的没有数据' + text elif many_people == 2: time_of_duration = '0 天 0 时 1 分', '0 天 0 时 0 分', '0 天 0 时 2 分' for i in range(1, 4): element = "//*[@id='task-mytask-table']/tbody/tr[%s]/td[7]" % i time_text = get_element(driver, ('xpath', element)).text sleep(0.5) assert time_text in time_of_duration # 修改用工合同结束时间 elif task_type == '修改用工合同结束时间': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() contract_name = '曹永用工合同结束时间审核' element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len) + 1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element_3s(driver, ('xpath', element), 20).text title_text.insert(i, text) print(title_text) task_type += '签订失败' try: assert contract_name in title_text except Exception as e: print(task_type) print(e) bug_photo(driver) assert False
def workman_contract(driver, people): try: into_one_level(driver, "任务面板") sleep(1) into_two_level(driver, "发起申请") get_element(driver, ('xpath', "//div[contains(text(),'新建用工合同')]")).click() get_element(driver, ('xpath', "//span[contains(text(),'计时工人用工合同')]")).click() project_element = "//select[@id='reproject-name']/option[2]" get_element(driver, ('xpath', project_element)).click() get_element(driver, ('xpath', "//*[@id='reproject-team']/option[2]")).click() get_element(driver, ('xpath', "//input[@placeholder='请输入正常出勤单价']")).send_keys( random.randint(10, 99)) get_element(driver, ('xpath', "//input[@placeholder='请输入加班单价']")).send_keys( random.randint(10, 99)) # 选择工种 work_type = "//*[@id='work-type']/option" work_type_element = "//*[@id='work-type']/option[%d]" % random.randint( 2, len(work_type)) get_element(driver, ('xpath', work_type_element)).click() get_element( driver, ('xpath', "//input[@placeholder='请输入姓名查询']")).send_keys(people) sleep(0.5) workman_element = "//span[contains(text(),'%s')]" % people get_element(driver, ('xpath', "//input[@placeholder='请输入姓名查询']")).send_keys( Keys.ENTER) sleep(1) get_elements(driver, ('xpath', workman_element))[0].click() information = "按工作时间长短付给你工资的工作。" get_element( driver, ('xpath', "//textarea[@placeholder='选填']")).send_keys(information) setting_input_time(driver) get_elements( driver, ('xpath', "//input[@placeholder='必填']"))[0].send_keys('08:00') get_elements( driver, ('xpath', "//input[@placeholder='必填']"))[1].send_keys('18:00') get_element(driver, ('xpath', "//input[@placeholder='小于用工合同结束日期']")).send_keys( get_pass_dates(2)) get_element( driver, ('xpath', "//input[@placeholder='选择日期不得大于分包合同结束日期']")).send_keys( get_future_date(180)) get_elements( driver, ('xpath', "//input[@placeholder='必填']"))[2].send_keys('10') get_element(driver, ('xpath', "//button[contains(text(),'完成')]")).click() assert is_element_present(driver, ( 'xpath', "//div[contains(text(),'成功')]/i[@class='layui-layer-ico layui-layer-ico1' ]" )) except Exception as e: print(e) bug_photo(driver) assert False
def approve_workflow(driver, task_type): into_one_level(driver, '任务面板') sleep(0.5) into_two_level(driver, '我的任务') if task_type == '修改总包合同结束时间': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '工件完成工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '请假工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '加班工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '修改出勤时间工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() elif task_type == '修改用工合同结束时间': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() # 点击详情 try: get_element(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr[1]/td[9]/a")).click() sleep(1) # 点击通过 get_element(driver, ('xpath', "//button[@class='btn btn-sm btn-success']")).click() # 输入备注 get_element(driver, ('xpath', "//textarea")).send_keys('s') # 点击确定 get_element(driver, ('xpath', "//a[@class='layui-layer-btn0']")).click() except Exception as e: print(e) bug_photo(driver) assert False sleep(10) driver.find_element_by_xpath("//a[contains(text(),'我审核过的')]").click() sleep(2) if task_type == '修改总包合同结束时间': contract_name = '关于浙江如舞亚更工程的总包合同结束时间修改审核' element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)+1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) task_type += '签订失败' assert contract_name in title_text, "%s" % task_type elif task_type == '工件完成工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() contract_name = '测试工件完成审核' sleep(0.5) element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)+1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) task_type += '签订失败' assert contract_name in title_text, "%s" % task_type elif task_type == '请假工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) try: get_element(driver, ('xpath', update_contract_element)).click() except Exception as e: print(e) bug_photo(driver) assert False contract_name = '曹永请假审核', '俞俊鑫、邵雪雷、郝梦影等人请假审核' element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)+1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) task_type += '签订失败' if contract_name[0] in title_text: pass elif contract_name[1] in title_text: pass else: bug_photo(driver) assert False elif task_type == '加班工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() contract_name = '俞俊鑫、邵雪雷、郝梦影等人加班审核' element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)+1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) task_type += '签订失败' assert contract_name in title_text, "%s" % task_type elif task_type == '修改出勤时间工作流': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() contract_name = '俞俊鑫、邵雪雷、郝梦影等人修改出勤时间审核' element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len)+1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element(driver, ('xpath', element)).text title_text.insert(i, text) print(title_text) task_type += '签订失败' assert contract_name in title_text, "%s" % task_type elif task_type == '修改用工合同结束时间': update_contract_element = "//button[contains(text(),'%s')]" % str(task_type) get_element(driver, ('xpath', update_contract_element)).click() contract_name = '曹永用工合同结束时间审核' element_len = get_elements(driver, ('xpath', "//*[@id='task-mytask-table']/tbody/tr")) title_text = [] for i in range(1, len(element_len) + 1): element = "//*[@id='task-mytask-table']/tbody/tr[%d]/td[4]" % i text = get_element_3s(driver, ('xpath', element), 20).text title_text.insert(i, text) print(title_text) task_type += '签订失败' try: assert contract_name in title_text except Exception as e: print(task_type) print(e) bug_photo(driver) assert False
def test_NewCompany(self): company_name = get_company_name() into_one_level(self.driver, '运维面板') into_two_level(self.driver, '注册公司管理') self.driver.find_element_by_xpath( "//button[contains(text(),'新增')]").click() self.driver.find_element_by_xpath( "//input[@placeholder='企业名称']").send_keys(company_name) self.driver.find_element_by_xpath( "//input[@placeholder='0000XX0000']").send_keys(random_str(18)) # a = self.driver.find_element_by_xpath(".//*[@id='company-address']/div/div[1]/select") # a.find_element_by_xpath("//option[@value='北京市']").click() # 方法1 self.driver.find_element_by_xpath( ".//*[@id='company-address']/div/div[1]/select/option[12]").click( ) # 方法2 省 # Select(a).select_by_value('内蒙古自治区') # 方法3 self.driver.find_element_by_xpath( ".//*[@id='company-address']/div/div[2]/select/option[2]").click( ) # 市 self.driver.find_element_by_xpath( ".//*[@id='company-address']/div/div[3]/select/option[3]").click( ) # 区 self.driver.find_element_by_xpath( "//input[@placeholder='输入街道名称']").send_keys('南京路') self.driver.find_element_by_xpath( "//input[@placeholder='门派号、小区名称、房间号']").send_keys('3号') information = '室内装潢及设计、园林绿化、园林绿化工程施工等' self.driver.find_element_by_xpath( "//textarea[@placeholder='长度不超过500个字符']").send_keys(information) get_element( self.driver, ('xpath', "//input[@placeholder='企业固定电话格式 例:0759-7654321']")).send_keys( get_telephone()) self.driver.find_element_by_xpath( "//input[@placeholder='输入法人姓名']").send_keys(getRandomName()) self.driver.find_element_by_xpath( "//button[contains(text(),'完成')]").click() self.driver.refresh() sleep(2) elem = "//td[contains(text(),%s)]" % company_name get_element( self.driver, ('xpath', "//input[@placeholder='请输入公司名称筛选']")).send_keys(company_name) get_element(self.driver, ('xpath', "//button[contains(text(),'搜索')]")).click() sleep(1) new_company_name = self.driver.find_elements_by_xpath(elem)[0].text assert new_company_name == company_name get_element(self.driver, ('xpath', "//input[@placeholder='请输入公司名称筛选']")).clear() get_element( self.driver, ('xpath', "//input[@placeholder='请输入公司名称筛选']")).send_keys(company_name) get_element(self.driver, ('xpath', "//button[contains(text(),'搜索')]")).click() elem = "//td[contains(text(),%s)]" % company_name select_company_name = self.driver.find_element_by_xpath(elem).text assert select_company_name == company_name # 全称查询公司 self.driver.find_element_by_xpath( "//input[@placeholder='请输入公司名称筛选']").clear() self.driver.find_element_by_xpath( "//input[@placeholder='请输入公司名称筛选']").send_keys(company_name[1:3]) self.driver.find_element_by_xpath( "//button[contains(text(),'搜索')]").click() assert company_name in select_company_name new_elem = "//td[contains(text(),%s)]" % company_name sleep(0.5) select_companys_name = self.driver.find_elements_by_xpath(new_elem) company_name_list = [] j = 0 # 公司的index 规律是每5个就是公司的text # 获取所有的公司名称 for i in range(int(len(select_companys_name) / 5)): company_name_list.insert( i, self.driver.find_elements_by_xpath(new_elem)[j].text) j += 5 print(company_name_list) assert company_name in company_name_list # 包含这个字段的公司,在列表里面
def location_card(driver, people): into_two_level(driver, '设备管理') driver.find_element_by_xpath("//a[contains(text(),'定位卡')]").click() num = random.randint(1000000, 9999999) # 增加定位卡 driver.find_elements_by_xpath("//button[contains(text(),'新增')]")[1].click() get_element( driver, ('xpath', "//input[@placeholder='请输入6-10定位卡卡号']")).send_keys(num) sleep(0.1) driver.find_element_by_xpath("//button[contains(text(),'确认')]").click() get_element( driver, ('xpath', "//input[@placeholder='请输入定位卡号或姓名筛选']")).send_keys(num) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[1].click() assert str(num) == get_element( driver, ('xpath', "//*[@id='dwk-table']/tbody/tr/td[2]")).text, "不在location中,新增失败" # 增加并且绑定人 num1 = random.randint(1000000, 9999999) driver.find_elements_by_xpath("//button[contains(text(),'新增')]")[1].click() get_element(driver, ('xpath', "//input[@placeholder='请输入6-10定位卡卡号']")).clear() get_element( driver, ('xpath', "//input[@placeholder='请输入6-10定位卡卡号']")).send_keys(num1) get_element( driver, ('xpath', "//span[@class='select2-selection__placeholder']")).click() get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(people) sleep(0.5) get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys( Keys.ENTER) sleep(0.1) driver.find_element_by_xpath("//button[contains(text(),'确认')]").click() if is_element_present(driver, ('xpath', "//div[contains(text(),'该用户已绑定定位卡')]")): # 解绑定位卡 sleep(6) get_element(driver, ('xpath', "//input[@placeholder='请输入定位卡号或姓名筛选']")).clear() get_element(driver, ('xpath', "//input[@placeholder='请输入定位卡号或姓名筛选']")).send_keys(people) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[1].click() sleep(1) for i in range( len( get_elements(driver, ('xpath', "//*[@id='dwk-table']/tbody/tr"))), 0, -1): unbind_element = "//*[@id='dwk-table']/tbody/tr[%d]/td[10]/a" % i get_element(driver, ('xpath', unbind_element)).click() sleep(0.1) get_element( driver, ('xpath', "//*[@id='dwk']/form/div[4]/button[3]")).click() assert is_element_present( driver, ('xpath', "//i[@class='layui-layer-ico layui-layer-ico1']")), "解绑考勤卡失败" sleep(0.5) # 输入空格 查看全部 get_element(driver, ('xpath', "//input[@placeholder='请输入定位卡号或姓名筛选']")).clear() get_element( driver, ('xpath', "//input[@placeholder='请输入定位卡号或姓名筛选']")).send_keys(' ') sleep(0.5) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[1].click() driver.find_elements_by_xpath( "//button[contains(text(),'新增')]")[1].click() sleep(0.5) get_element( driver, ('xpath', "//input[@placeholder='请输入6-10定位卡卡号']")).send_keys(num1) get_element( driver, ('xpath', "//span[@class='select2-selection__placeholder']")).click() get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys(people) sleep(0.5) get_element( driver, ('xpath', "//input[@class='select2-search__field']")).send_keys( Keys.ENTER) driver.find_element_by_xpath("//button[contains(text(),'确认')]").click() get_element(driver, ('xpath', "//input[@placeholder='请输入定位卡号或姓名筛选']")).clear() get_element( driver, ('xpath', "//input[@placeholder='请输入定位卡号或姓名筛选']")).send_keys(num1) get_elements(driver, ('xpath', "//button[contains(text(),'筛选')]"))[1].click() sleep(1) assert people == get_element( driver, ('xpath', "//*[@id='dwk-table']/tbody/tr/td[3]")).text, "定位卡绑定人失败" for i in range( len( get_elements(driver, ('xpath', "//*[@id='dwk-table']/tbody/tr"))), 0, -1): location_element = "//*[@id='dwk-table']/tbody/tr[%d]/td[1]/input" % i get_element(driver, ('xpath', location_element)).click() driver.find_elements_by_xpath( "//button[contains(text(),'删除')]")[1].click() get_elements(driver, ('xpath', "//button[contains(text(),'确认')]"))[3].click() get_element(driver, ('id', "success")).click() if is_element_present( driver, ('xpath', "//div[contains(text(),'无法删除已经绑定用户的定位卡,请重新选择用户,或者先解绑')]")): sleep(7) unbind_element = "//*[@id='dwk-table']/tbody/tr[%d]/td[10]/a" % i get_element(driver, ('xpath', unbind_element)).click() get_element( driver, ('xpath', "//*[@id='dwk']/form/div[4]/button[3]")).click() get_element(driver, ('xpath', location_element)).click() sleep(0.5) get_elements( driver, ('xpath', "//button[contains(text(),'删除')]"))[1].click() sleep(0.5) get_elements( driver, ('xpath', "//button[contains(text(),'确认')]"))[3].click() get_element(driver, ('id', "success")).click() assert is_element_present(driver, ('xpath', "//td[@colspan='10']")), "定位卡删除失败"
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