目录
Selenium Webdriver
安装ChromeDriver
ChromeDriver Mirror到此链接安装对应版本的WebDriver
将下载路径配置环境变量
webdriver的工作原理
自动化测试的LOVE四步法
实操测试
from selenium import webdriver
import time
driver = webdriver.Chrome(r'D:\Program Files (x86)\Chromedriver\chromedriver_win32\chromedriver.exe')
driver.get('https://www.baidu.com/?tn=88093251_30_hao_pg')
driver.find_element_by_id('kw').click() # 定位id为kw元素 进行点击
driver.find_element_by_id('kw').clear() # 清空元素内容
driver.find_element_by_id('kw').send_keys('webdriver') # 输入内容
driver.find_element_by_id('su').click() # 点击元素
print(driver.page_source) # 输出网页源码
time.sleep(2)
driver.close() # 关闭当前窗口网页
driver.get()可以用来打开本地的文件,只需要在get里输入本地的路径。
webdriver常用API
-
打开:driver.get(url)
-
关闭:driver.quit()结束当前进程 driver.close()仅关闭当前窗口
-
设置窗口大小:driver.set_window_size(w,h)
-
最大化窗口:driver.maximze_window()
-
获取网页源码:driver.page_source
-
获取窗口名称:driver.name
-
刷新页面:driver.refresh()
-
获取页面标题:driver.title
-
获取当前页面url地址:driver.current_url
-
获取当前页面截图:driver.get_screenshot_as_file(path)
from selenium.webdriver.common.keys import Keys 发送复合按键
driver.find_element_by_id('kw').send_keys('Webdriver') # 输入内容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL+'a')
输入Webdriver之后全选 输入框的内容 ctrl+A全选
from selenium.webdriver.support.ui import Select # 下拉框操作
Select(driver.find_element_by_id('kw')).select_by_visible_text()
Select(driver.find_element_by_id('kw')).select_by_value()
select_by_visible_text() 根据下拉框 选项的文本进行选择
select_by_value() 根据下拉框 选项的value属性值进行选择
webdriver定位
-
driver.find_element() 返回第一个符合条件的元素
-
driver.find_elements() 以列表的形式返回所有符合条件的元素
以上两个函数可以通过使用
-
id
-
class 无法使用复合样式定位 class中写了两个样式只能选其中一个样式名进行定位
-
name
-
tag name
-
partial link text 超链接显示的文本 可模糊匹配
-
link text 定位超链接的文本 匹配完整
-
xpath
-
css selector
元素定位的常规原则
元素定位方式选择
-
页面有id时,有限使用id来定位,其次是name
-
Xpath很强悍,但定位性能不是很好,它需要遍历文档上的每个节点来确定定位,当其他方法不好定位时可以使用
-
定位一组相同元素时,可考虑使用tagname或者name
-
定位连接时,可考虑linkText或partialLinkText
定位元素的注意事项
-
找到待定位元素的唯一属性
-
如果该元素没有唯一属性,则先找到能被唯一定位到的父元素/子元素/相邻元素,再使用xpath或css选择器进行基于位置的定位。
-
不要使用随机唯一属性定位(如该属性值是随机生成的)
-
最重要的是多跟研发沟通,尽量把关键元素加上ID或者name,并减少不合理的页面元素,例如重复ID这样的事情最好不要发生。
find_element和find_elements的区别
find_element返回一个符合条件的元素,找不到元素时会报错
find_elements返回符合条件的所有元素元素的列表,找不到元素时会返回空列表