有关测试自动化python插件selenium的一些总结:
1. 一些资料的地址
chomedriver包的下载地址,要对应自己的chrome版本:
淘宝镜像
http://npm.taobao.org/mirrors/chromedriver/
python3.8的下载地址,略
pip的下载地址
https://pypi.org/project/pip/
selenium + python 中文文档
https://python-selenium-zh.readthedocs.io/zh_CN/latest/
需要安装的一些插件
pip install selenium (核心)
pip install pymysql (支持python从mysql查询数据)
2.构建步骤
从mysql中查询数据
import pymysql
db = pymysql.connect(
host = '',
port = 3306,
user = '',
password = '',
charset = 'utf8',
database = ''
)
def query():
cur = db.cursor()
cur.execute('select DISTINCT(USER_ACCOUNT) from portal_sys.apd_mstart_sys_right limit 50;')
data3 = cur.fetchall()#获取结果集全部
db.close()
return data3
根据查到的数据做进一步操作
import time
from telnetlib import EC
from selenium import webdriver#导入库
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import sql
browser = webdriver.Chrome()#声明浏览器
url = 'www.baidu.com'
browser.get(url)#打开浏览器预设网址
#隐式等待
browser.implicitly_wait(10)
#账号
input_first = browser.find_element_by_id('username')
input_first.click()
input_first.send_keys('user')
#密码
input_first = browser.find_element_by_id('password')
input_first.click()
input_first.send_keys('password')
#点击登录
input_first = browser.find_element_by_id('loginBtn')
input_first.click()
#这里的元素定位我都用的是绝对定位,因为相对定位总有一些说不清的问题,我放弃研究了
#权限管理
select=browser.find_element_by_xpath('/html/body/div[1]/section/header/div[2]/aside/div/ul/li[4]/div/span')
select.click()
#岗位管理
#显式等待3秒等待页面加载成功
time.sleep(3)
#hidden_submenu = select.find_element_by_xpath('//ul[@role="menu"]/li[2]/span')
hidden_submenu = select.find_element_by_xpath('/html/body/div[2]/ul/li[2]/span')
hidden_submenu.click()
#显式等待3秒等待页面加载成功
time.sleep(3)
tree = browser.find_element_by_xpath('/html/body/div/section/div[2]/div/div/div/div[2]/div/div[1]/div[1]/div[2]/div/div[1]/div/span[2]')
tree.click()
tree = browser.find_element_by_xpath('/html/body/div/section/div[2]/div/div/div/div[2]/div/div[1]/div[2]/div[2]/div[1]/div/label/span')
tree.click()
#搜索默认岗位
input = browser.find_element_by_xpath('/html/body/div/section/div[2]/div/div/div/div[2]/div/div[1]/div[2]/div[1]/div/div[2]/div/div/div/input')
input.send_keys('默认岗位')
#点击搜索
search = browser.find_element_by_xpath('/html/body/div/section/div[2]/div/div/div/div[2]/div/div[1]/div[2]/div[1]/div/div[2]/div/div/div/span/span')
search.click()
search = browser.find_element_by_xpath('/html/body/div/section/div[2]/div/div/div/div[2]/div/div[1]/div[2]/div[2]/div[2]/div/div/div/div[1]/div[3]/table/tbody/tr/td[2]')
search.click()
#人员分配
search = browser.find_element_by_xpath('/html/body/div/section/div[2]/div/div/div/div[2]/div/div[2]/div[1]/div/div/div/div[6]')
search.click()
userList=sql.query()
for user in userList:
#新增
search = browser.find_element_by_xpath('/html/body/div/section/div[2]/div/div/div/div[2]/div/div[2]/div[2]/div[5]/div[1]/div/div/button[1]/span')
search.click()
print(user)
#输入用户名
input = browser.find_element_by_xpath('/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[2]/div[1]/div/div/div[1]/input')
input.clear()
input.send_keys(user)
#搜索
time.sleep(2)
search1 = browser.find_element_by_xpath('/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[2]/div[1]/div/div/div[1]/span/span')
search1.click()
time.sleep(2)
#选取整个表单
userForm = browser.find_element_by_xpath('/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/div/div/div[1]/div[3]/table/tbody')
usertr=userForm.find_elements_by_tag_name("tr")
for index,tr in enumerate(usertr):
index=int(index)+ 1
i=str(index)
time.sleep(1)
userText=browser.find_element_by_xpath("/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/div/div/div[1]/div[3]/table/tbody/tr["+i+"]/td[2]/div").get_attribute("innerText")
print("userText: "+userText)
print("index: "+i)
if userText==str(user[0]):
userselect=browser.find_element_by_xpath("/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/div/div/div[1]/div[3]/table/tbody/tr["+i+"]/td[1]/div/label/span")
userclass=userselect.get_attribute('class')
print(userclass)
#是否已经选中
if 'is-checked' in userclass:
print("111111")
confirmBtn = browser.find_element_by_xpath('/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[3]/span/button[2]/span')
confirmBtn.click()
else:
userselect=tr.find_element_by_xpath("/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/div/div/div[1]/div[3]/table/tbody/tr["+i+"]/td[1]/div/label/span")
userselect.click()
time.sleep(1)
confirmBtn = browser.find_element_by_xpath('/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[3]/span/button[1]/span')
confirmBtn.click()
elif i==10:
confirmBtn = browser.find_element_by_xpath('/html/body/div[1]/section/div[2]/div/div/div/div[2]/div/div[3]/div[2]/div/div[3]/span/button[2]/span')
confirmBtn.click()
3.一些要注意的问题
- chomedriver放到python的安装目录,并且要跟chrome版本对应
- 元素定位尽量用绝对定位(有缺点,如果页面元素有一点改动就会找不到元素)
select=browser.find_element_by_xpath('/html/body/div[1]/section/header/div[2]/aside/div/ul/li[4]/div/span')
而少用这种
username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
因为后面这种相对定位很容易定位不到对应的元素,我遇到了几次,没搞清楚原因,希望有大神可以解答