自动化前言
- 什么项目适合做自动化?
- 自动化测试的介入点:
- 自动化测试项目实施过程
- 可行性分析,框架选择,需求分析,计划,测试用例设计,无人值守,提交报告,脚本维护。
元素定位的几种方法
id定位
from selenium.webdriver.common.by import BY
elem=driver.find_element(By.ID,"kw")
定位的元素例子:
<a id="kw">哈哈哈<a>
name定位
from selenium.webdriver.common.by import BY
elem=driver.find_element(By.NAME,"kw")
定位的元素例子:
<a name="kw">哈哈哈<a>
link_text定位
from selenium.webdriver.common.by import BY
elem=driver.find_element(By.LINK_TEXT,"新闻")
定位的元素例子:
<a herf="https://www.baidu.com">新闻<a>
partial_link_text定位
from selenium.webdriver.common.by import BY
elem=driver.find_element(By.PARTIAL_LINK_TEXT,"新")
定位的元素例子: 根据部分文本来定位
<a herf="https://www.baidu.com">新闻<a>
xpath定位(重点)
绝对路径:/开头的是相对路径,从第一个标签开始逐步往下找元素叫绝对路径 例子:/html/body/div[2]/div[3]/div/div/ul[2]/li[8]/li/a/div/span 相对路径://开头的是绝对路径,从某个元素开始逐步往下找元素叫相对路径
-
相对路径+索引
- //form/span[1]/input (form标签下第2个span标签下的input标签)
-
相对路径+属性
- input标签下autocomplete属性为off的标签(//input[@autocomplete=‘off’])
-
相对路径+通配符
- //*[@autocomplete=‘off’] (任意标签下autocomplete属性为off的标签)
- //*[contains(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
-
相对路径+部分属性定位
- //*[contains(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
- //*[starts-with(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
- //*[substring(@autocomplete,‘of’)] (任意标签下autocomplete属性包含of的标签)
-
相对路径+文本定位
css定位
略
常见问题
- 如果元素定位不到,怎么分析
- 元素没有加载完成
- 元素在frame种
- 元素不可用,不可读,不可见
- 动态属性,动态div层
前提:需要定位的元素属性必须唯一。
元素操作的常用方法
基本方法
send_keys()
向文本框发送内容
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys("Selenium")
text
获取标签之间文本值
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
print(elem.text)
get_attribute()
获取标签的属性值
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.get_attribute("value")
maximize_window()
最大化窗口
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
current_window_handle
返回当前窗口句柄
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.current_window_handle)
current_url
返回当前窗口url
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.current_url)
is_selected()
判断元素是否被选择
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_selected()
is_enable()
判断元素是否可用
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_enable()
is_displayed()
判断元素是否在页面中显示
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.is_displayed()
clear()
清除输入框值
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys("Selenium")
elem.clear()
quit()
关闭浏览器并杀掉chromedriver
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.quit()
title
获取页面title
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.title)
refresh()
刷新页面
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.refresh()
back()
退后操作
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.back()
特殊方法
ActionChains
Selenium中将键盘鼠标操作封装在Action Chains中。 示例:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
ActionChains(driver).move_to_element(bg_config).perform()
- click 模拟鼠标单击操作
- click_and_hold 模拟鼠标单击并按住不放
- double_click 模拟鼠标双击
- context_click 模拟鼠标右击
- drag_and_drop(source,target) 模拟鼠标拖拽
- drag_and_drop(source, xoffset, yoffset) 将目标拖拽到目标位置
- key_down(value) 模拟按住某个键,实现快捷操作
- key_up(value) 模拟松开某个键,一般和key_down操作一起使用
- move_to_element(to_element) 模拟将鼠标移到指定的某个页面元素
- move_to_element_with_offset(to_element,x,y) 移动鼠标到指定坐标
- perform() 将之前一系列Action-Chains执行
- release() 释放按下的鼠标
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
elem.send_keys(Keys.BACK_SPACE)
ActionChains(driver).move_to_element(bg_config).perform()
Select操作
示例:
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
Select(elem).select_by_index(1)
-
select_by_index(n) 根据下标选择 -
select_by_value(value) 根据值选择 -
select_by_visible_text(text) 根据text内容做选择 -
options 获取下拉列表所有选项 -
first_selected_options 返回所有被选中的选项 -
first_selected_option 返回第一个被选中的选项
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
options=Select(elem).options
for elem in options:
print(elem.text)
调用js代码
- execute_script() 同步执行js
- execute_async_script() 异步执行js
js实现浏览器滚动条操作
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
js="window.scrollTo(100,300)"
driver.execute_script(js)
frame操作
进入frame
- 根据id定位frame并进入frame,id=login_frame
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.switch_to.frame(driver.find_element_by_id("login_frame"))
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.switch_to.frame(0)
退出frame
driver.switch_to.default_content()
Cookie操作
- add_cookie(cookie_dict) 在当前会话中添加cookie信息
- delete_all_cookie() 删除所有cookie信息
- delete_cookie(cookie_name) 删除单个名字为cookie_name的cookie信息
- get_cookie(cookie_name) 返回名为cookie_name 的cookie信息
- get_cookies() 返回当前会话的所有cookie信息
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.add_cookie({"session":"12344322"})
截图操作
屏幕截图
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.save_screenshot("q.png")
元素截图
from selenium import webdriver
from selenium.webdriver.support.select import Select
from PIL import Image
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
elem=driver.find_element_by_id("kw")
left=elem.locationp['x']
top=elem.locationp['y']
right=left+elem.size['width']
bottom=top+elem.size['height']
im=Image.open("test.png")
im=im.crop((left,top,right,bottom))
im.save('t.png')
多窗口切换
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get("https://www.baidu.com/")
handles=driver.window_handles
driver.switch_to.window(handles[1])
|