自动化测试工具selenium的使用
一 selenium 和浏览器驱动的安装
pip install -i https://pypi.douban.com/simple selenium
下载对应浏览器版本的驱动并进行安装
二 定位页面元素
2.1定位使用的方法
find_elements(self, by=By.ID, value=None) #2.1.1 by 属性:定位路径使用的方法
By.ID
By.TAG_NAME
By.CLASS_NAME
By.NAME
By.XAPTH
By.CSS_SELECTOR
该属性默认的属性值为By.ID
#2.1.2 value属性:定位的路劲
2.2 解析方法详解
##例:
'''<html>
<head>...<head/>
<body>
<div id="csdn-toolbar">
<div class="toolbar-inside">
<div class="toolbar-container">
<div class="toolbar-container-left">...</div>
<div class="toolbar-container-middle">
<div class="toolbar-search onlySearch">
<div class="toolbar-search-container">
<input id="toolbar-search-input" autocomplete="off" type="text" value="" placeholder="C++难在哪里?">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>'''
#2.2.1 XPATH 定位
# 绝对路径(层级关系)定位
driver.find_element(By.XAPTH, "/html/body/div/div/div/div[2]/div/div/input[1]")
# 利用元素属性定位
driver.find_element(By.XAPTH, "//*[@id='toolbar-search-input']"))
# 层级+元素属性定位
driver.find_element( By.XAPTH, "//div[@id='csdn-toolbar']/div/div/div[2]/div/div/input[1]")
# 逻辑运算符定位
driver.find_element(By.XAPTH, "//*[@id='toolbar-search-input' and @autocomplete='off']")
#2.2.2 CSS 定位
例:
driver.find_element(By.XPATH,'#toolbar-search-input')
driver.find_element(By.XPATH,'html>body>div>div>div>div>div>div>input')
#2.2.3 id 定位
标签的id具有唯一性,不会重复,所以我们可以不用管其他的标签的内容。
例子如下:
'<input id="toolbar-search-input" autocomplete="off" type="text" value="" placeholder="C++难在哪里?">'
driver.find_element(By.ID, "toolbar-search-input")
#2.2.4 name 定位
name 指定标签的名称,在页面中可以不唯一
例子如下:
'<meta name="keywords" content="xiao">'
driver.find_element(By.NAME,"keywords")
#2.2.5 class 定位
class指定的类名可以不唯一
例子如下:
'<div class="toolbar-search-container">'
driver.find_element(By.CLASS_NAME,"toolbar-search-container")
#2.2.6 link 定位,partial_link 定位,tag 定位
这三种定位方式不常用
三 模拟浏览器操作
1.1浏览器窗口操作
set_window_size() 方法来修改浏览器窗口的大小。
maximize_window() 方法实现浏览器全屏显示
back和forward方法来实现页面的后退与前进
refresh()来刷新当前页面。
window_handles获取所有窗口句柄,返回的是列表
switch_to.window("句柄")用来切换窗口
switch_to.frame(“id”)切换子窗口
其他方法如下:
1.2鼠标事件
鼠标操作都封装在ActionChains类中,常见方法如下:
使用时先创建ActionChains(driver)实例化对象,再利用对象去调用 键盘事件也是如此
1.3键盘事件
常用事件
其他键盘事件以及使用方法:
例:向下箭头的使用
tr = ActionChains(bro)
tr.key_down(Keys.DOWN).perform()
#1 实例化ActionChains对象
#2 调用方法key_down(“执行的操作”)
#3 perform()保存操作(即执行操作)
1.4元素等待事件
1.4.1 显式等待
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:浏览器驱动
timeout:超时时间,单位秒
poll_frequency:每次检测的间隔时间,默认为0.5秒
ignored_exceptions:指定忽略的异常,如果在调用 until 或 until_not 的过程中抛出指定忽略的异常,则不中断代码,默认忽略的只有 NoSuchElementException 。
until(method, message=’ ‘)
until_not(method, message=’ ')
method:指定预期条件的判断方法,在等待期间,每隔一段时间调用该方法,判断元素是否存在,直到元素出现。until_not 正好相反,当元素消失或指定条件不成立,则继续执行后续代码
message: 如果超时,抛出 TimeoutException ,并显示 message 中的内容
method 中的预期条件判断方法是由 expected_conditions 提供,下面列举常用方法。
例子:
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
locator = (By.ID, 'kw')
element = driver.find_element('kw')
element = WebDriverWait(driver, 5, 0.5).until(
EC.presence_of_element_located((By.ID, 'kw')),
message='超时啦!')
1.4.3 隐式等待
隐式等待是用implicitly_wait() 来实现的。
例子:
driver.implicitly_wait(5)
1.4.3 强制等待
time.sleep(0)