1 搞定selenium 元素定位及操作
1.1 搭建测试环境
- 浏览器安装
- Chorme firefox ie
- 查看浏览器版本
- 浏览器驱动
- Chorme http://npm.taobao.org/mirrors/chromedriver/
- Firefox https://github.com/mozilla/geckodriver/releases
- ie http://selenium-release.storage.googleapis.com/index.html
- 注意事项
- 浏览器和浏览器驱动相对应
- 驱动版本和浏览器版本相对应
- 存放路径(python 根目录)
- python+selenium
- python – 语言环境
- Selenium – pip install selenium
1.2 web自动化测试流程
- 操作步骤
- 导入selenium
- 打开浏览器
- 浏览器驱动地址
- 输入网址
- 对页面进行操作
- 元素定位
- 常见的元素操作
- Clear()
- Send_keys()
- Click()
- 关闭浏览器
"""
导入驱动
打开浏览器(不带控件)
输入网址
窗口最大化
3秒后关闭浏览器
"""
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
time.sleep(3)
driver.quit()
1.3 元素定位方式及常见问题
-
什么是元素定位
- 查找html元素的过程
-
标签
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
- input – 标签名
- id name class value maxlength autocomplete – 属性名
- kw wd … – 属性值
-
元素定位方式
-
标签
-
id name class_name tag_name
-
定位方式 driver.find_element_by_()
-
-
超链接
-
link_text partical_link_text
-
ele = driver.find_element_by_partial_link_text("hao")
-
-
xpath css
-
Xpath –
-
绝对路径 (从根目录一层一层进行查找) /html/body/form
-
相对路径 (// input[@id=“kw”])
-
ele = driver.find_element_by_xpath("//input[@id='kw']")
-
-
css
-
Css 是一种语言 用来描述 html和xml文档 css 使用选择器来为页面绑定css属性 这些选择器可以被selenium用于定位
-
Id – # id_value
-
class – .class_value
-
标签+属性
ele = driver.find_element_by_css_selector("input[class=s_ipt]")
-
-
-
-
-
-
元素定位常见问题
- 页面元素未成功加载
- 切换页面未找到元素
- 京东点击手机 – 选择锁定输入框
- Iframe 原因找不到定位元素
- qq 邮箱登陆
1.4 元素等待
-
什么是元素等待
- Webdriver 定位页面元素时 会在指定时间内一直等待的过程 为了保证脚本运行的稳定性 需要脚本中添加等待时间
-
等待方式
- 显示等待 隐式等待 强制等待
-
区别
-
显示等待
-
直到元素出现才去操作,如果超时则报异常
-
WebDriverWait()
-
通常和EC 模块结合使用
-
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://www.baidu.com") # 如果强制等待3秒 -- 导入time 使用time.sleep() 即可 """ 显示等待 通常会和EC 模块进行配合使用 """ # presence_of_element_located() -- 参数是一个元组 # ele = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located(("name", "wd"))) ele = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located(("link text", "新闻"))) print(ele.get_attribute("outerHTML"))
-
-
隐式等待
- 实际上浏览器会在你自己设定的时间内部断的刷新页面去寻找我们需要的元素
- implicity_wait()
from selenium import webdriver """ 当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常 """ driver = webdriver.Chrome() driver.implicitly_wait(5) driver.get("https://www.baidu.com") ele = driver.find_element_by_id("kw") print(ele.get_attribute("outerHTML"))
-
强制等待
- 程序必须等待时间
- time.sleep()
-