有关测试自动化python插件selenium的一些总结

有关测试自动化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]")

因为后面这种相对定位很容易定位不到对应的元素,我遇到了几次,没搞清楚原因,希望有大神可以解答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值