1、为 Python 安装 selenium模块,pip install selenium
2、下载对应浏览器驱动
Chromedriver
http://npm.taobao.org/mirrors/chromedriver/
版本对照表:https://blog.csdn.net/BinGISer/article/details/88559532
Firefoxdriver
https://github.com/mozilla/geckodriver/releases
版本对照表:https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html
3、配置环境变量
设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: F:\GeckoDriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“F:\GeckoDriver”目录添加到Path的值中。比如:Path字段;F:\GeckoDriver
find_element_by_id:通过ID进行匹配查找,只返回匹配到的一个元素
find_element_by_name:通过name进行匹配查找,只返回匹配到的一个元素
find_element_by_xpath:通过xpath进行匹配查找,只返回匹配到的一个元素
find_element_by_link_text:通过链接内容进行匹配查找,只返回匹配到的一个元素
find_element_by_partical_link_text:通过部分链接内容进行匹配查找,只返回匹配到的一个元素
find_element_by_tag_name:通过标签名称进行匹配查找,只返回匹配到的一个元素
find_element_by_class_name:通过class名称进行匹配查找,只返回匹配到的一个元素
find_element_by_css_selector:通过CSS选择器进行匹配查找,只返回匹配到的一个元素
值得注意的是,上面方法只会匹配查找只会获取第一个元素。除了上面这些查找单个元素的方法之外,Selenium还定义查找多个元素的方法,就是element加s。
示例代码:
driver.find_element_by_id('kw')
dr.find_element_by_name("wd")
dr.find_element_by_class_name("s_ipt")
dr.find_element_by_tag_name("input")
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")
不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。通过我们获取title 、URL和text等信息进行断言。
属性 | 说明 |
---|---|
title | 用于获得当前页面的标题 |
current_url | 用户获得当前页面的URL |
text | 获取搜索条目的文本信息 |
示例代码:
from selenium import webdriver
from time import ctime
import time
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
driver.maximize_window()
#通过ID进行匹配查找
idele1 = driver.find_element_by_xpath('//*[@id="s-hotsearch-wrapper"]/div/a[1]/div')
print(idele1.text)
idele = driver.find_element_by_id('kw')
idele.send_keys("selenium")
print(driver.title)
print(driver.current_url)
driver.quit()
打印结果
百度热榜
百度一下,你就知道
https://www.baidu.com/
webdriver提供了两种类型的元素等待,隐式等待 和 显式等待
示例代码:
from selenium import webdriver
from time import ctime
import time
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
driver.maximize_window()
try:
print(ctime())
driver.find_element_by_id("kw")
print(ctime())
driver.find_element_by_id("kw1")
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
打印结果
Sat Sep 12 21:56:15 2020
Sat Sep 12 21:56:15 2020
Message: no such element: Unable to locate element: {“method”:“css selector”,“selector”:"[id=“kw1”]"}
(Session info: chrome=84.0.4147.125)
Sat Sep 12 21:56:25 2020
示例代码;
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
driver.maximize_window()
element = WebDriverWait(driver,10,0.5).until(
#此处注意,参数传的是元组,少括号是执行不了的
expected_conditions.presence_of_element_located((By.ID,'kw'))
)
element.send_keys("selenium\n")
time.sleep(3)
driver.quit()
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.implicitly_wait(10)
driver.get('https://www.baidu.com')
#最大化
driver.maximize_window()
time.sleep(2)
#最小化
driver.minimize_window()
time.sleep(2)
#指定大小
driver.set_window_size(100,100)
time.sleep(2)
driver.quit()
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.get("http://news.baidu.com")
time.sleep(2)
driver.get('https://www.baidu.com')
#后退
driver.back()
time.sleep(2)
#前进
driver.forward()
time.sleep(2)
#刷新
driver.refresh()
time.sleep(2)
driver.quit()
clear(): 清除文本。
send_keys (value): 模拟按键输入(被操作元素需要是个 input 标签)。
click(): 单击元素
size: 返回元素的尺寸。
text: 获取元素的文本。
get_attribute(name): 获得属性值。
is_displayed(): 检测该元素是否用户可见
submit()方法用于提交表单。
两种截图方式:
1.全屏截图:driver.get_screenshot_as_file(fileroot)
注意 :文件名必须是png格式的图片格式
2.元素截图:element.screenshot()
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.common.exceptions import NoSuchElementException
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.maximize_window()
element = driver.find_element_by_id('kw')
element.send_keys('selenium')
driver.get_screenshot_as_file('.\\a.png')
element.screenshot('.\\b.png')
time.sleep(1)
driver.quit()
警告框处理简单来说有:
text:显示文本内容
accept() :通过
dismiss():拒绝
send_key():输入
鼠标事件主要:
(1)需要ActionChains 类
(2)向ActionChains类注入 driver 调用方法方法中传参数element
(3)最后一定要调用perform()方法 否则不执行
单击:click(ele)
双击:double_click(ele)
拖拽:drag_and_drop(ele1,ele2)
右击:context_click(ele)
driver = webdriver.Chrome("D:\BaiduNetdiskDownload\chromedriver.exe")
driver.get("http://www.baidu.com")
driver.implicitly_wait(10)
driver.maximize_window()
element = driver.find_element_by_id('kw')
element.send_keys('selenium')
ele = driver.find_element_by_id('su')
#单击
ActionChains(driver).click(ele).perform()
ele1 =driver.find_element_by_xpath('//*[@id="result_logo"]/img[1]')
#双击
ActionChains(driver).double_click(element).perform()
#右击
ActionChains(driver).context_click(element).perform()
#拖拽
ActionChains(driver).drag_and_drop(ele1,element).perform()
time.sleep(2)
driver.quit()
Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键盘的操作。
常用的键盘操作如下:
模拟键盘按键 | 说明 |
---|---|
send_keys(Keys.BACK_SPACE) | 删除键(BackSpace) |
send_keys(Keys.SPACE) | 空格键(Space) |
send_keys(Keys.TAB) | 制表键(Tab) |
send_keys(Keys.ESCAPE) | 回退键(Esc) |
send_keys(Keys.ENTER) | 回车键(Enter) |
组合键的使用
模拟键盘按键 | 说明 |
---|---|
send_keys(Keys.CONTROL,‘a’) | 全选(Ctrl+A) |
send_keys(Keys.CONTROL,‘c’) | 复制(Ctrl+C) |
send_keys(Keys.CONTROL,‘x’) | 剪切(Ctrl+X) |
send_keys(Keys.CONTROL,‘v’) | 粘贴(Ctrl+V) |
send_keys(Keys.F1…Fn) | 键盘 F1…Fn |