【web测试】selenium
selenium环境搭建:
- 基于python环境
- selenium安装、卸载、查看:
安装pip install selenium
卸载pop uninstall selenium
查看pip show selenium
- webdriver下载
chromewebdriver:
国内镜像
找对应的浏览器版本下载
下载解压好,文件地址放入系统path变量中,或把文件放入项目目录。
入门:打开一个网页
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
# webdriver 获取浏览器对象
s = Service(r"./chromedriver.exe")
driver = webdriver.Chrome(service=s)
# 准备一个网址 https://www.baidu.com/
url = "https://www.baidu.com/"
driver.get(url)
time.sleep(5)
# 回收资源
driver.quit()
网站弹出安全验证怎么办
如果运行自动化脚本,弹出百度安全验证,可以在每条动作语句的后面都加上driver.implicitly_wait(30),运行后出现验证自己去点,wait的时间就是你点验证所需要的最大时间
元素定位
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
from selenium.webdriver.common.by import By
# webdriver 获取浏览器对象
s = Service(r"./chromedriver.exe")
driver = webdriver.Chrome(service=s)
# 准备一个网址 https://www.baidu.com/
url = "https://www.baidu.com/"
driver.get(url)
# 查找元素 方式1.通过id
driver.find_element(by=By.ID, value="kw").send_keys("python")
driver.find_element(By.ID, "su").click()
# 方式2.通过name
driver.find_element(by=By.NAME, value="wd").send_keys("python")
driver.find_element(By.ID, "su").click()
# 方式3.通过class_name
driver.find_element(by=By.CLASS_NAME, value="s_ipt").send_keys("python")
driver.find_element(By.ID, "su").click()
time.sleep(5)
# 回收资源
driver.quit()
- a标签的定位:
# 定位a标签 link text ; partial linktext
driver.find_element(By.LINK_TEXT, "hao123").click() # 写a标签中间夹着的内容
# a标签中内容比较长时,可以用一部分内容去定位
driver.find_element(By.PARTIAL_LINK_TEXT, "hao12").click()
- 通过css选择器定位:
# 通过css选择器定位 #-id,.-class
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("python")
driver.find_element(By.CSS_SELECTOR,".s_ipt").send_keys("python")
driver.find_element(By.CSS_SELECTOR, "[name=wd]").send_keys("python")
driver.find_element(By.CSS_SELECTOR, "[value='百度一下']").click()
- xpath方式:
xml path 可扩展 标记语言
html 超文本 标记语言
谷歌浏览器安装插件:xpath helper
网上下载好解压后.crx的文件改为.rar,再解压到文件夹,把这个文件夹导入到chrome拓展程序中
# xpath方式定位 (xml path)
driver.find_element(By.XPATH, "//*[@id='kw']").send_keys("python")
driver.find_element(By.XPATH, "//*[@id='su']").click()
元素操作
driver.find_element(By.ID, "kw").send_keys("python")
time.sleep(3)
driver.find_element(By.ID, "kw").clear()
driver.find_element(By.ID, "kw").send_keys("java")
driver.find_element(By.ID, "su").click()
# 获取元素大小
print(driver.find_element(By.ID, "kw").size)
# 获取元素文本
print(driver.find_element(By.ID, "kw").text)
# 是否可见
print(driver.find_element(By.ID, "kw").is_enabled())
# 是否可用
print(driver.find_element(By.ID, "kw").is_displayed())
# 获取“新闻”的属性
print(driver.find_element(By.XPATH, "//*[text()='新闻']").get_attribute("href"))
浏览器的操作
# 最大化浏览器
driver.maximize_window()
# 设置浏览器大小:
time.sleep(1)
driver.set_window_size(800, 600)
time.sleep(2)
# 设置浏览器位置
driver.set_window_position(200, 200)
# 浏览器前进后退
driver.find_element(By.ID, "kw").send_keys("python")
driver.find_element(By.ID, "su").click()
time.sleep(5)
driver.back() # 后退
print(driver.title)
print(driver.current_url)
time.sleep(5)
driver.forward() # 前进
time.sleep(5)
driver.refresh() # 刷新
time.sleep(5)
driver.back()
driver.find_element(By.XPATH, "//*[text()='hao123']").click()
time.sleep(5)
driver.close() # 关闭页面
time.sleep(5)
# 回收资源,关闭浏览器
driver.quit()
页面等待
强制等待,显示等待,隐式等待
代码的执行速度远高于页面加载速度,在翻页时或加载新页面时,需要进行页面等待,等待网页加载
# 输入要搜索的内容 图片
driver.find_element(By.ID, "kw").send_keys("图片")
time.sleep(5)
# 点击 百度一下
driver.find_element(By.ID, "su").click()
# 强制等待
time.sleep(5) # 等待的秒数跟网络有关,并不是最优解
# 显示等待:明确地等待某个元素加载完成,每隔0.5秒检查一次,最多等待*秒时间
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID,'1')))
# 隐式等待:没有明确告知等待哪个元素
driver.implicitly_wait(5)
# 点击第一张图片
driver.find_element(By.XPATH, "//*[@id='1']/div/div[1]/div[2]/div[1]/a[1]").click()