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)