PYTHON-WEB-UI自动化-ranzhi添加成员-git到码云


新手笔记,大家看到不爽处,多多包涵

1.git到gitee步骤参考大神:

注意:

 操作到这一步骤之后输入的是用户gitee绑定的邮箱

 参考代码:

import random
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from BasePage import BaseDriver
from BasePage import BasePage

# class AddUser:
class AddUser(BasePage): # 类的继承
    def addUser(self):
        # 创建浏览器
        # driver = webdriver.Chrome()
        # driver = BaseDriver().get_driver()
        # 打开页面
        # html = driver.get('http://localhost/ranzhi/www')
        # page = BasePage(driver) # 这里调用类的时候必须传入类对象driver,使用继承类直接重写open方法
        self.open_page('http://localhost/ranzhi/www')

        try:
        # 登录模块:
            # 输入用户名
            # input_name = self.driver.find_element(By.ID, 'account')
            # input_pwd = self.driver.find_element(By.ID, 'password')
            btn = self.driver.find_element(By.ID, 'submit')
            # 点击进入
            # ActionChains(self.driver).send_keys_to_element(input_name, 'admin').perform()
            self.type('id=account','admin')
            # ActionChains(self.driver).send_keys_to_element(input_pwd, '123456').click(btn).perform()
            self.type('id=password','123456')
            #点击登录按钮
            self.click_btn('id=submit')
            # 真名断言
            # realname = self.driver.find_element(By.XPATH, '//*[@id="mainNavbar"]/div/ul[1]/li/a').text
            realname = self.get_text('partial_link_text=admin')
            # 真名断言
            assert realname == 'admin', 'Log Failed!'

        # 进入iframe模块:
            # 定位齿轮
            # self.driver.find_element(By.XPATH, '//*[@id="s-menu-superadmin"]/button').click()
            self.click_btn('xpath=//*[@id="s-menu-superadmin"]/button')
            # 进入iframe边侧栏
            # self.driver.switch_to.frame('iframe-superadmin')
            self.switch_to_frame('id=iframe-superadmin')
            # self.driver.find_element(By.XPATH, '// *[ @ id = "shortcutBox"] / div / div[1] / div / a').click()
            self.click_btn('partial_link_text=添加成员')
        # 添加成员模块:
            w = 1
            while w <= 5:
                w = 1
                # 随机生成用户名
                admin = random.sample(
                    ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'z',
                     'x', 'c', 'v', 'b', 'n', 'm'], 5)
                # 随机生成6位密码
                password = '123456'
                # 随机生成realName
                real_name = 'realname'

                # 表单录入信息
                # self.driver.find_element(By.ID, 'account').send_keys(admin)
                self.type('id=account',admin)
                # self.driver.find_element(By.ID, 'realname').send_keys(real_name)
                self.type('id=realname',real_name)
                # self.driver.find_element(By.ID, 'genderm').click()
                self.click_btn('id=genderm')

                # 部门(着重练习)
                select = driver.find_element(By.ID, 'dept')
                dept = Select(select)

                # 获取value值,及对应的部门名称
                length = len(driver.find_elements(By.CSS_SELECTOR, '#dept > option'))
                print(length)
                for i in range(2, length + 1):
                    xp = f'//*[@id="dept"]/option[{i}]'
                    lists = self.driver.find_element_by_id('dept').find_element_by_xpath(xp)
                    # print(type(lists))
                    value = lists.get_attribute('value')
                    text = lists.text
                    print(f'{value}:{text}')

                # 根据选项的下标进行选择,从0开始
                # index = input("please  input dev_index:")
                index = random.choice(['19','20','21','22','23'])
                print(type(index))
                # dept.select_by_index(index)
                # 根据选项的value属性来进行选择,下标从0开始
                dept.select_by_value(index)
                # 根据选项的文本进行选择
                # dept.select_by_visible_text('/研发部')
                # 角色
                role_length = len(self.driver.find_elements(By.CSS_SELECTOR, '#role > option'))
                for i in range(2, role_length + 1):
                    xp1 = f'//*[@id="role"]/option[{i}]'
                    lists = self.driver.find_element_by_id('role').find_element_by_xpath(xp1)
                    # print(type(lists))
                    value = lists.get_attribute('value')
                    text = lists.text
                    print(f'{value}:{text}')
                # dev = input("please input role's value:")
                dev = random.choice(['dev','pm','market','sale','hr','office','service','support','marketmgr','salemgr','hrmgr','adminmgr','servicemgr','supportmgr','top','others'])
                Select(self.driver.find_element(By.ID, 'role')).select_by_value(dev)
                # 密码
                # password1 = input("输入6位密码:")
                self.driver.find_element(By.ID, 'password1').send_keys('123456')
                # password2 = input("please input pwd again:")
                self.driver.find_element(By.ID, 'password2').send_keys('123456')
                # email = input("请输入合法邮箱:")
                self.driver.find_element(By.ID, 'email').send_keys(f"{random.randint(0,9)}{random.randint(0,9)}{random.randint(0,9)}{random.randint(0,9)}{random.randint(0,9)}@qq.com")
                self.driver.find_element(By.XPATH, '//*[@id="submit"]').click()
                # 再次进入元素添加模块:
                # self.driver.find_element(By.XPATH, '/html/body/div/div/div/div[1]/div/div[2]/a[1]').click()
                # self.click_btn('xpath=/html/body/div/div/div/div[1]/div/div[2]/a[1]')
                self.click_btn('partial_link_text=添加成员')
            print('本次添加成员数:%d'%w)
        finally:
            sleep(2)


if __name__ == '__main__':
    #不继承BasePage的:
    # add_user = AddUser()
    # add_user.addUser()
    # 继承BasePage的:
    driver = BaseDriver.get_driver()
    sleep(2)
    AddUser(driver).addUser()
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


class BaseDriver:
    @staticmethod # 静态方法-装饰器
    def get_driver(browser='chrome'):
        '''
        获取浏览器驱动
        :param bower: 浏览器类型
        :param driver: 浏览器类型
        :return: 浏览器类型
        '''
        if browser == 'chrome':
            driver = webdriver.Chrome()
        elif browser == 'firefox':
            driver = webdriver.Firefox()
        elif browser == 'edge':
            driver = webdriver.Edge()
        elif browser == 'ie':
            driver = webdriver.Ie()
        elif browser == 'safari':
            driver = webdriver.Safari()

        return driver

class BasePage:
    def __init__(self, driver): #对应接收类对象
        self.driver = driver

    def open_page(self,url,timeout=5):
        '''
        打开指定的页面
        :param url:页面地址
        :param timeout: 最大等待时间,单位是秒
        :return: NONE
        '''
        # 窗口最大化
        self.driver.maximize_window()
        # 打开页面
        self.driver.get(url)
        # 隐式等待
        self.driver.implicitly_wait(timeout)

    def converter(self,target):
        '''
        将自定义的定位方式,转变为Selenium的标准定位方式
        'link_text = account ' --> By.ID,'account'
        :param target:
        :return:
        '''
        #按照第一个=来拆分字符串
        by,value = target.split('=',1)
        # 替换定位方式中的下划线以及前后多余的空白字符
        by = by.replace('_',' ').strip()
        value = value.replace('_',' ').strip()
        # 放回标准定位方式
        return by,value # 如果试图返回多个值,则自动封装成一个元组

    def locate_element(self,target, timeout=5, poll_frequency=0.2):
        '''
        定位单个元素
        :param target:自定义元素定位方式
        :param timeout:最大等待时间
        :param poll_frequency:查询时间间隔
        :return:定位到的元素
        '''
        # 转换定位方式
        locater = self.converter(target)
        print(locater)
        # return self.driver.find_element(*locater)
        # return self.driver.find_element(By.ID, '//*[@id="kw"]')
        return WebDriverWait(self.driver,5,0.2).until(expected_conditions.presence_of_element_located(locater))

    def type(self,target,value):
        '''
        向目标元素输入文本(input表单输入文本内容)
        :param target: 自定义定位方式
        :param value: 要输入的文本信息
        :return:
        '''
        self.locate_element(target).send_keys(value)
    def click_btn(self,target):
        '''
        封装一个点击的函数
        :param target: 传过来的是按钮的ID
        :return:NONE
        '''
        # btn = self.converter(target)
        # print(btn)
        # self.driver.find_element(By.ID,btn[1]).click()
        print('click_btn:')
        print('\t'+target)
        self.locate_element(target).click()


    def switch_to_frame(self,target):
        '''
        定位iframe元素
        :param target: 自定义定位方式
        :return: None
        '''
        iframe = self.locate_element(target)
        # 进入iframe
        self.driver.switch_to.frame(iframe)

    def get_text(self,target):
        '''
        用于获取指定路径下面的text文本文件
        :param target: 文本元素路径
        :return: 获取到的文本
        '''
        print(target)
        text = self.locate_element(target).text
        print('text:' + text)
        return text

if __name__ == '__main__':
    driver = BaseDriver.get_driver()
    target = ' link_text = //*[@id="kw"] '
    locater = BasePage(driver).converter(target)
    print(locater)
    print(*locater)
 

相关