Python+selenium案例实战

最近项目有一个需求:测试人员考勤数据分析结果,历史的手工测试方式是手动将每一种测试数据依次补加进考勤系统内,这种方式在很大程度上降低了测试的效率,以及数据补加的不准确性,所以,趁此机会,写了selenium脚本来替代手工测试。

实现功能如下:循环补加考勤数据,分别是签到设备、签到时间,签退设备、签退时间
在这里插入图片描述
步骤一:获取页面元素信息

from selenium.webdriver.common.by import By

class SubattendPage():
    vagueStr=(By.ID,'vagueStr')
    searchB=(By.ID,'searchB')
    setReplenishRaw=(By.ID,'setReplenishRaw')
    checkAll=(By.ID,'checkAll')
    #签到、签退设备
    singIn_choice=(By.XPATH,'//*[@id="form"]/div/div/div[1]/div/div/div/input')
    singIn=(By.XPATH,'//*[@id="form"]/div/div/div[1]/div/div/dl/dd[4]')
    singOut_choice=(By.XPATH,'//*[@id="form"]/div/div/div[3]/div/div/div/input')
    singOut=(By.XPATH,'//*[@id="form"]/div/div/div[3]/div/div/dl/dd[4]')
    inTimeDate=(By.ID,'inTimeDate')
    outTimeDate=(By.ID,'outTimeDate')
    save=(By.ID,'save')
    close=(By.XPATH,'//*[@id="layui-layer1"]/span[1]/a')

    def __init__(self, driver):
        self.driver = driver
    def set_vagueStr(self,name):
        element_search = self.driver.find_element(*SubattendPage.vagueStr)
        element_search.clear()
        element_search.send_keys(name)
    def click_search(self):
        self.driver.find_element(*SubattendPage.searchB).click()
    def click_checkAll(self):
        element_checkAll= self.driver.find_element(*SubattendPage.checkAll)
        element_checkAll.click()
    def click_ReplenishRaw(self):
        self.driver.find_element(*SubattendPage.setReplenishRaw).click()

    def singIn_Choice(self):
        self.driver.find_element(*SubattendPage.singIn_choice).click()
        self.driver.find_element(*SubattendPage.singIn).click()

    def set_inTimeDate(self,inTime):
        element_inTimeDate=self.driver.find_element(*SubattendPage.inTimeDate)
        element_inTimeDate.clear()
        element_inTimeDate.send_keys(inTime)
    def set_outTimeDate(self,outTime):
        element_outTimeDate=self.driver.find_element(*SubattendPage.outTimeDate)
        element_outTimeDate.click()
        element_outTimeDate.send_keys(outTime)

    def singOut_Choice(self):
        self.driver.find_element(*SubattendPage.singOut_choice).click()
        self.driver.find_element(*SubattendPage.singOut).click()
    def click_save(self):
        self.driver.find_element(*SubattendPage.save).click()

步骤二:补加考勤数据方法

from Automation.test_basepage.SubattendPage import SubattendPage
from selenium.common.exceptions import NoSuchElementException
import traceback
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
class SubAttend_Method():
    def __init__(self, driver):
        self.driver = driver
    def subattend(self,intime,outtime,iframe):
        try:
            # SubattendPage(self.driver).set_vagueStr(name)
            # SubattendPage(self.driver).click_search()
            # time.sleep(1)
            # #全选按钮
            # SubattendPage(self.driver).click_checkAll()
            #补加按钮

            SubattendPage(self.driver).click_ReplenishRaw()
            self.driver.switch_to.frame(self.driver.find_element_by_id(iframe))
            time.sleep(4)
            js_inTimeDate = '$("input[readonly]").attr("readonly",null);'
            self.driver.execute_script(js_inTimeDate)
            # js_outTimeDate = '$("input[readonly]").attr("readonly",null);'
            # self.driver.execute_script(js_outTimeDate)


            if len(intime)!=0 and len(outtime)!=0:
                SubattendPage(self.driver).set_inTimeDate(intime)
                SubattendPage(self.driver).singIn_Choice()
                SubattendPage(self.driver).set_outTimeDate(outtime)
                SubattendPage(self.driver).singOut_Choice()
                SubattendPage(self.driver).click_save()

            if len(intime)==0 and len(outtime)!=0:
                SubattendPage(self.driver).set_outTimeDate(outtime)
                SubattendPage(self.driver).singOut_Choice()
                SubattendPage(self.driver).click_save()

            if len(intime)!=0 and len(outtime)==0:
                SubattendPage(self.driver).set_inTimeDate(intime)
                SubattendPage(self.driver).singIn_Choice()
                SubattendPage(self.driver).click_save()

            if len(intime)==0  and len(outtime)==0:
                print('----------签到签退均为空------------')
                self.driver.find_element(*SubattendPage.close).click()



        except NoSuchElementException as e:
            print(traceback.print_exc())
**

步骤三:运行补加考勤测试方法

import unittest
from selenium import webdriver
import time
import ddt
from Automation.test_module.subattend_method import SubAttend_Method
from Automation.test_basepage.LoginPage import LoginPage
from Automation.test_module.Execl import ExcelUtil

from selenium.common.exceptions import NoSuchElementException

data = ExcelUtil('E:\\pythonTest\\execl\\person.xlsx', 'Sheet1').dict_data()

@ddt.ddt
class Test_SubAttend(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()
        self.driver.get("http://192.168.10.104:8989")
        LoginPage(self.driver).set_username('admin')
        LoginPage(self.driver).set_password('123456')
        LoginPage(self.driver).click_Login()

    @ddt.data(*data)
    def test_person(self,data):
        self.driver.find_element_by_link_text('考勤管理').click()
        self.driver.find_element_by_link_text('补加考勤').click()
        self.driver.find_element_by_link_text('补加考勤').click()
        time.sleep(3)
        self.driver.switch_to.default_content()
        self.driver.switch_to.frame(self.driver.find_element_by_xpath('/html/body/div/div[3]/div/div/div[2]/iframe'))
        intime=data["inTime"]
        outtime=data["outTime"]

        SubAttend_Method(self.driver).subattend('采购',intime,outtime)

    def tearDown(self):
        self.driver.quit()
from Automation.test_basepage.LoginPage import LoginPage
from selenium import webdriver
from Automation.test_module.subattend_method import SubAttend_Method
import time
from Automation.test_module.Execl import ExcelUtil
from Automation.test_basepage.SubattendPage import SubattendPage
class main():
    driver = webdriver.Firefox()
    driver.implicitly_wait(10)
    driver.maximize_window()
    #driver.get("http://127.0.0.1:8989")
    driver.get("http://127.0.0.1:8989")
    LoginPage(driver).set_username('sw')
    LoginPage(driver).set_password('111111')

    LoginPage(driver).click_Login()

    driver.find_element_by_link_text('考勤管理').click()
    driver.find_element_by_link_text('补加考勤').click()
    driver.find_element_by_link_text('补加考勤').click()
    time.sleep(3)
    driver.switch_to.default_content()
    driver.switch_to.frame(driver.find_element_by_xpath('/html/body/div/div[3]/div/div/div[2]/iframe'))

    SubattendPage(driver).set_vagueStr('神酒')
    SubattendPage(driver).click_search()

    # 全选按钮
    #data=ExcelUtil('E:\\IRS\\testcase\\TestCase_SDB.xls','Sheet6')
    data = ExcelUtil('E:\\IRS\\testcase\\TestCase_SDB.xls', 'Sheet3')
    def subattend(self,shade):
        time.sleep(1)
        SubattendPage(self.driver).click_checkAll()
        intime=main().data.dict_data()[i].get('inTime')
        outtime=main().data.dict_data()[i].get('outTime')
        iframe=main().data.dict_data()[i].get('iframe')

        SubAttend_Method(self.driver).subattend(intime,outtime,iframe)
        time.sleep(3)
        self.driver.switch_to.default_content()
        self.driver.switch_to.frame(self.driver.find_element_by_xpath('/html/body/div/div[3]/div/div/div[2]/iframe'))

        # ele = self.driver.find_element_by_id(shade)
        # self.driver.execute_script('arguments[0].click()', ele)
        #self.driver.execute_script("document.getElementById('layui-layer-shade1').style.display='none'")


for i in range(len(main().data.dict_data())):
      main().subattend(main().data.dict_data()[i].get('shade'))

欢迎留言,补充,本人资质尚浅,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值