一、selenium基本方法
① 元素操作
driver.maximize_window() # 最大化窗口
driver.set_window_size(500, 500) # 设置窗口大小
driver.set_window_position(1000,0) # 设置窗口位置
driver.forward() # 前进
driver.back() # 后退
driver.refresh() # 刷新
driver.current_url # 获取网页当前url
driver.title # 获取网页标题
② 获取元素信息的常用方法
driver.find_element_by_xx("xx").size # 返回元素大小
driver.find_element_by_xx("xx").text # 返回元素的文本
driver.find_element_by_xx("xx").get_attribute("xxx") # 获取属性值,传递的参数为元素的属性名
1> 当前选中标签的属性名 # 获取该属性名的值
2> textContent:获取标签之间的文本内容
3> innerHTML:获取标签之间的完整HTML(不包含当前选中标签)
4> outerHTML:获取当前标签的完整HTML(包含当前选中标签)
5> value: 获取input输入框的元素的输入文本
driver.find_element_by_xx("xx").is_enabled() # 判断元素是否可用
driver.find_element_by_xx("xx").is_displayed() # 判断元素是否可见
driver.find_element_by_xx("xx").is_selected() # 判读元素是否选中,用来检查复选框或单选按钮是否被选中
③ 获取元素文本
1> 通过WebElement对象的text属性,可以获取元素展示在界面上的文本内容
driver.find_element_by_xx("xx").text # 返回元素的文本
2> 但是,当元素的文本内容没有展示在界面上,或者没有完全展示在界面上,这时用WebElement对象的text属性可能无法获取到文本内容。可尝试使用如下方法:
driver.find_element_by_xx("xx").get_attribute("innerText")
或者
driver.find_element_by_xx("xx").get_attribute("textContent")
innerText和textContent属性的区别:
① textContent会获取style="display:none"中的文本,而innerText不会
② textContent会获取style标签里面的文本,而innerText不会
③ textContent不会理会html格式,直接输出不换行的文本,innerText会根据标签里面的元素独立一行
④ innerText对IE兼容性较好,textContent虽然作为标准方法但是只支持IE8+以上浏览器
例如:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://cdn1.python3.vip/files/selenium/sample1.html")
print(driver.find_element_by_xpath('//div[@id="container"]').get_attribute('innerText'))
print(driver.find_element_by_xpath('//div[@id="container"]').get_attribute('textContent'))
driver.quit()
3> 对于input输入框的元素,要获取里面的输入文本,用text属性的不行的,可以使用如下方法:
driver.find_element_by_xx("xx").get_attribute("value")
二、鼠标操作
方法 | 作用 |
double_click() | 双击 |
context_click() | 右击 |
move_to_element() | 悬停 |
drag_and_drop() | 拖拽 |
perform() | 执行 |
示例:
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
action = ActionChains(driver=driver)
action.move_to_element(driver.find_element_by_id("s-usersetting-top")).perform() # 定位首页“设置”元素,鼠标悬停
三、键盘操作
方法 | 作用 |
Keys.ENTER | 回车 |
Keys.SPACE | 空格键 |
Keys.TAB | TAB键 |
Keys.BACK_SAPCE | 删除键 |
Keys.CONTROL,'a' | 全选 |
示例:
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('python学习', Keys.ENTER)
四、截屏
get_screenshot_as_file()
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('python学习', Keys.ENTER)
sleep(4)
driver.get_screenshot_as_file('./test.png') # 也可以保存为jpg格式,虽然会报错但图片还是会保存
五、窗口切换
switch_to_window()
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
current_handle = driver.current_window_handle # 当前窗口句柄
sleep(2)
driver.find_element_by_xpath("//*[@id='hotsearch-content-wrapper']/li[1]/a/span[2]").click() # 点击百度热搜第一个
handles = driver.window_handles # 获取所有窗口句柄
sleep(2)
for handle in handles:
if handle == current_handle:
driver.switch_to_window(handle) # 切换窗口
driver.find_element_by_id('kw').send_keys('python学习', Keys.ENTER)
六、滚动条
我们在进行UI自动化测试时,免不了要滑动鼠标,因为有些元素并不在首屏,需要滑动鼠标才可见。
selenium进行自动化过程中,可通过execute_script执行js语句实现页面滑动。常见的滑动场景分为四种:滑动至页面底部、滑动至顶部、滑动至具体位置、滑动至目标元素可见。
滑动到页面底部:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
滑动到页面顶部:
driver.execute_script("window.scrollTo(0, -document.body.scrollHeight)")
滑动到具体位置:
driver.execute_script("window.scrollTo(x,y)") # 滚动到具体位置
driver.execute_script("window.scrollBy(x,y)") # 滚动到具体位置
driver.execute_script("window.scrollBy(0,500)") # 向下滑动500个像素
driver.execute_script("window.scrollBy(0,-500)") # 向上滚动500个像素
driver.execute_script("window.scrollBy(500,0)") # 向右滑动500个像素
driver.execute_script("window.scrollBy(-500,0)") # 向左滚动500个像素
或者
# 滚动条左右滚动————向右
js0 = 'var q=document.documentElement.scrollLeft=100'
driver.execute_script(js0)
# 滚动条左右滚动————向左
js1 = 'var q=document.documentElement.scrollLeft=0'
driver.execute_script(js1)
# 滚动条上下滚动————向下
js2 = 'var q=document.documentElement.scrollTop=1000'
driver.execute_script(js2)
# 滚动条上下滚动————向上
js3 = 'var q=document.documentElement.scrollTop=0'
driver.execute_script(js3)
案例一:打开博客首页,将滚动条拖动到最底部,然后再拖动到最顶部
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("")
time.sleep(3)
# 将滚动条向下拖动到某个位置
js = 'var action=document.documentElement.scrollTop=50000000'
driver.execute_script(js)
time.sleep(3)
# 将滚动条拖动到最顶部
js0 = 'var action=document.documentElement.scrollTop=0'
driver.execute_script(js0)
time.sleep(3)
driver.quit()
案例二:模拟鼠标滚动到需要显示的元素位置,使用场景:浏览器窗口小,页面过大内容显示不全,元素可以定位但不可见
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("")
time.sleep(3)
target = driver.find_element_by_xpath("//a[text()='关于我们']")
driver.execute_script("arguments[0].scrollIntoView();", target) # 第一种方式
# driver.execute_script("arguments[0].focus();", target) # 第二种方式
time.sleep(3)
driver.quit()
________________________________________________
参考博客:
http://www.manongjc.com/detail/17-gtiggglmhdjppwu.html