Selenium进行Web自动化测试
Selenium+Python实现Web自动化测试
一、环境配置
环境基于win10(X64)
- 安装Python;
- 安装PyCham
- 安装chomedriver
chomedriver下载地址
可以查看本地chrome软件版本下载对应的chomedriver,如果没有则下载最新版本即可;
将下载解压后的chromedriver放到安装的Python环境文件夹内
4.代码实现一个简单自动化查找
from selenium import webdriver
from selenium.webdriver.common.by import By
# 定义一个driver变量,用来接收实例化后的浏览器
driver = webdriver.Chrome()
# 使用get方法,访问网址
driver.get("https://www.bilibili.com")
# 1.找到搜索框的位置,输入软件测试
driver.find_element(By.CLASS_NAME, 'nav-search-input').send_keys("软件测试")
# 2.找到搜索框位置点击搜索
driver.find_element(By.CLASS_NAME, 'nav-search-btn').click()
二、元素定位
By.ID、By.CLASS_NAME、By.NAME底层实现都是CSS查找;
By.ID | By.LINK_TEXT |
---|---|
By.CLASS_NAME | By.PARTIAL_LINK_TEXT |
By.TAG_NAME | By.CSS_SELECTOR |
By.NAME | By.XPATH |
1、By.ID
网页校验id:document.getElement(“kw”)
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("selenium")
driver.find_element(By.ID, "su").click()
2、By.CLASS_NAME
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get("https://www.bilibili.com")
# 唯一class_name定位
# driver.find_element(By.CLASS_NAME,'nav-search-input').send_keys('软件')
# 找多个class_name的第一个
# driver.find_element(By.CLASS_NAME,'channel-link').click()
# 找多个class_name的非第一个,按下标查找
driver.find_elements(By.CLASS_NAME,'channel-link')[4].click()
# class_name中有空格时不可使用此查找 错误用法如下
# driver.find_element(By.CLASS_NAME,'icon-bg icon-bg__channel').click()
sleep(10)
3、By.TAG_NAME
(不推荐)
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get("https://www.bilibili.com")
driver.find_element(By.TAG_NAME,"input").send_keys("python")
# 根据下标
# driver.find_elements(By.TAG_NAME, "input")[50].click()
time.sleep(3)
driver.close()
4、By.NAME
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get("https://www.baidu.com")
# driver.find_element(By.NAME, "wd").send_keys("根据NAME定位")
# 根据下表取值
driver.find_elements(By.NAME, "wd")[0].send_keys("根据NAME定位")
time.sleep(3)
5、By.LINK_TEXT
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get("https://www.baidu.com")
# driver.find_element(By.LINK_TEXT, "新闻").click()
driver.find_elements(By.LINK_TEXT, "新闻")[0].click()
time.sleep(3)
driver.close()
6、By.PARTIAL_LINK_TEXT
模糊匹配
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get("https://www.baidu.com")
# driver.find_element(By.PARTIAL_LINK_TEXT, "新闻").click()
driver.find_elements(By.PARTIAL_LINK_TEXT, "闻")[0].click()
time.sleep(3)
driver.close()
7、By.CSS_SELECTOR
CSS常用汇总:
选择器 | 格式选择器 | 示例 | 示例说明 |
---|---|---|---|
标签选择器 | html标签 | input | 选择所有input元素 |
ID选择器 | #id属性值 | #kw | 选择所有id='kw’的元素 |
类选择器 | .class属性值 | .nav-search-input | 选择所有class='nav-search-input’的元素 |
属性选择器 | [属性名] | [name=‘wd’] | 选择所有name="wd"的元素 |
组合选择器 | 标签加属性描述 | input.s_ipt | 选择所有class='s_ipt’的input元素 |
父子关系 | 元素1>元素2 | div>a | 选择所有父级是div的a元素 |
后代关系 | #id属性值 | div a | 选择div中的所有a元素 |
第一子元素 | :first-clild | a:first-clild | 选择所有a元素且该元素是其父级的第一个元素 |
最后一个元素 | :last-clild | a:last-clild | 选择所有a元素且该元素是其父级的最后一个元素 |
顺序选择器 | :nth-clild(n) | a:nth-clild(2) | 选择所有a元素且该元素是其父级的第二个子元素(下标1开始) |
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get("https://www.baidu.com")
#根据ID定位
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("你好")
driver.find_element(By.CSS_SELECTOR,"#su").click()
# 根据class属性值定位
driver.find_element(By.CSS_SELECTOR,".nav-search-inpt").send_keys("你好")
# 根据name属性值定位
driver.find_element(By.CSS_SELECTOR,"[name= 'wd']").send_keys("你好")
# 根据标签属性定位
driver.find_element(By.CSS_SELECTOR,"a[href= 'http://image.baidu.com']").click()
# 模糊匹配-包含
driver.find_element(By.CSS_SELECTOR,"a[href*= 'image.baidu.com']").click()
# 模糊匹配-匹配开头
driver.find_element(By.CSS_SELECTOR,"a[href^= 'image.baidu.com']").click()
#模糊匹配-匹配结尾
driver.find_element(By.CSS_SELECTOR,"a[href$= 'image.baidu.com/']").click()
#组合定位
driver.find_element(By.CSS_SELECTOR,"input.s_ipt").send_keys("selenium")
#定位子元素
#<div id="s-top-left" class="s-top-left-new s-isindex-wrap">
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a").click()
#定位子元素-id唯一时
driver.find_element(By.CSS_SELECTOR,"#s-top-left>a").click()
driver.find_element(By.CSS_SELECTOR,"div.s-top-left-new.s-isindex-wrap>a").click()
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-clild(3)").click()
driver.find_elements(By.CSS_SELECTOR,"div#s-top-left>a")[3].click()
driver.find_elements(By.CSS_SELECTOR,"div#s-top-left>a:last-clild").click()