介绍
selenium是目前业内最核心的自动化测试技术,主要应用Web UI自动化阶段,
主流版本:3.X
最新版本:4.2.0
从selenium创建开始,作为火狐浏览器的插件存在,selenium1只能用录制回放的形态来进行自动化测试;selenium2版本创建了以webdriver为中间商的形态来实现;selenium3使用Selenium webdriver + grid;selenium4 selenium IDE(跨浏览器支持)+ selenium Webdriver + grade
selenium 是目前市场中最接近用户的实际操作行为的自动化执行
selenium Grid 主要是实现自动化测试的分布式部署
中文文档:Document
环境部署
安装selenium
pip install -U selenium
安装Webdriver
下载链接:
-
chrome webdriver – chromedriver http://chromedriver.storage.googleapis.com/index.html,没有对应版本,找最接近的低版本
-
edge webdriver – edgedriver https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
-
firefox webdriver – geckodriver https://github.com/mozilla/geckodriver/releases
解压chromedriver后,放到python的根路径下;或者放在chrome浏览器安装路径下,并将此路径设置在系统环境变量中
使用
实验网站
目的
搜索框输入Samsung,并点击搜索按钮
基本代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
# 1.create Webdriver object
service = Service(executable_path=r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver = webdriver.Chrome(service=service)
# 2.access specific url
driver.get(url=r"http://www.henwu.com/")
# 3.find Search box
el = driver.find_element(by=By.ID, value="search-input")
# 3.1.input search context
el.send_keys("Samsung")
# 3.2.click search
el = driver.find_element(by=By.ID, value="ai-topsearch").click()
time.sleep(3)
# close driver process
driver.quit()
底层等价写法:
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import pdb
service = Service(executable_path=r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver = webdriver.Chrome(service=service)
driver.execute("get", {"url": "http://www.henwu.com/"})
el = driver.execute("findElement", {'using':"css selector", 'value':'[id=search-input]'})['value']
# pdb.set_trace()
el._execute("sendKeysToElement",{'text':'Samsung', 'value':""})
el1 = driver.execute("findElement",{'using':"xpath",'value':'//*[@id="ai-topsearch"]'})["value"]
el1._execute("clickElement")
time.sleep(3)
driver.quit()
效果展示
注意事项
如果脚本没有设置结束进程,或者脚本没有正常结束,需要后台结束进程