PYTHON-WEB-UI自动化-ranzhi添加成员-git到码云
新手笔记,大家看到不爽处,多多包涵
1.git到gitee步骤参考大神:
https://www.cnblogs.com/ryanwuli/p/13065640.html
注意:
![]()
操作到这一步骤之后输入的是用户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)


浙公网安备 33010602011771号