Web自动化-Selenium
1.软件需求变更不频繁
2.项目周期比较长
3.需要频繁回归的场景
传统八大元素定位
定位方式 | 方法 |
---|---|
ID定位 | find_element(By.ID,“id属性值”) |
NAME定位 | find_element(Dy.NAME,“name属性值”) |
CLASS定位 | 1.find_element(By.CLASS_NAME,“class_name属性值”) 2.find_elements(By.CLASS_NAME,“class_name属性值”) |
TAG_NAME定位 | find_elements(By.TAG_NAME, " ") |
CSS_SELECTOR定位 | find_element(By.CSS_SELECTOR,“标签名”) |
LINK_TEXT 定位 | find_element(By.LINK_TEXT,“超链接全部文本值”) |
PARTIAL_LINK_TEXT定位 | find_element(By.PARTIAL_LINK_TEXT,“超链接部分文本值”) |
XPATH定位 | find_element(By.XPATH," ") |
小结:
- 如果元素有明确id,name,class属性时,使用对应的基本定位方法。
- 如果没有id,name,class属性时,或id,name,class属性是动态/不唯一的时候,使用XPath和css_selector定位。
- 定位页面超链接使用link_text和partial_link_text定位
- 可使用XPath和css_selector定位的时候,优先使用css_selector。css_selector定位的速度和效率比Xpath高。
浏览器操作方法
1、driver.maximize_window() # 最大化浏览器
2、driver.set_window_size(w,h) # 设置浏览器大小 单位像素
3、driver.set_window_position(x,y) # 设置浏览器位置
4、driver.back() # 后退操作
5、driver.forward() # 前进操作
6、driver.refrensh() # 刷新操作
7、driver.close() # 关闭当前主窗口(主窗口:默认启动那个界面,就是主窗口)
8、driver.quit() # 关闭driver对象启动的全部页面
9、driver.title # 获取当前页面title信息
10、driver.current_url # 获取当前页面url信息
注意:
driver.title
和 drivet.current_url
是属性,后面没有括号。应用场景:一般判断上不操作是否执行成功
driver.close()
和 driver.quit()
的区别:
close():
关闭当前主窗口
quit():
关闭由driver对象启动的所有页面
如果只有一个窗口那么quit()
和 close()
没有区别。
获取元素信息操作
1、text 获取元素的文本; 如:driver.text
2、size 获取元素的大小: 如:driver.size
3、get_attribute 获取元素属性值;如:driver.get_attribute("id") ,传递的参数是元素的属性名
4、is_displayed 判断元素是否可见 如:element.is_displayed()
5、is_enabled 判断元素是否可用 如:element.is_enabled()
6、is_selected 判断元素是否被选中 如:element.is_selected()
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
# 打开百度页面
driver.get("https://www.baidu.com")
# 最大化窗口
driver.maximize_window()
# 设置隐式等待10秒
driver.implicitly_wait(10)
# 获取元素的文本
print(driver.find_element(By.LINK_TEXT, "新闻").text)
# 获取元素大小
print(driver.find_element(By.LINK_TEXT, "新闻").size)
# 获取页面url
print(driver.current_url)
# 获取元素title
print(driver.title)
# 获取元素属性
print(driver.find_element(By.LINK_TEXT, "新闻").get_attribute("class"))
print(driver.find_element(By.LINK_TEXT, "新闻").get_attribute("id"))
print(driver.find_element(By.LINK_TEXT, "新闻").get_attribute("target"))
元素等待
1、为什么要设置元素等待
由于电脑配置或网络原因,在查找元素时,元素代码未在第一时间内被加载出来,而抛出未找到元素异常。
2、什么是元素等待
元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找打元素,抛出未找到元素异常。
3、元素等待分类
隐式等待:针对所有元素生效。一般情况下为前置必写代码(1.获取浏览器驱动对象;2. 最大化浏览器;3. 设置隐式等待)
显示等待:等待某个条件成立则继续执行,否则在达到最大时长时抛出超
时异常(TimeoutException)。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(EC.visibility_of_element_located((By.ID, "kw")))
element.send_keys('selenium')
WebDriverWait 类是 WebDriver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次,当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。WebDriverWait()一般与 until()或 until_not()方法配合使用
鼠标操作
实例化鼠标对象:ActionChains(driver)
1、context_click(element) # 右击
2、double_click(element) #双击
3、double_and_drop(source, target) # 拖拽
4、move_to_element(element) # 悬停 【重点】
5、perform() # 执行以上鼠标事件的方法 【重点】
6、click_and_hold(on_element=None) # 模拟鼠标单击并且按住不放
7、move_to_element_with_offset(to_element,xoffset,yoffset) # 移动鼠标至指定的坐标
8、click() # 左击
注意: selenium 框架虽然提供了 鼠标右键方法,但是没有提供选择右键菜单方法,可以通过键盘快捷键操作实现
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver=webdriver.Chrome()
# 打开百度页面
driver.get("https://www.baidu.com")
# 最大化窗口
driver.maximize_window()
# 设置隐式等待10秒
driver.implicitly_wait(10)
# 实例化鼠标对象
action=ActionChains(driver)
# 定位”新闻链接“
news=driver.find_element(By.LINK_TEXT,"新闻")
# 右键”新闻链接“
action.context_click(news)
# 悬停到”设置“
action.move_to_element(driver.find_element(By.CSS_SELECTOR,"#s-usersetting-top"))
# 鼠标执行操作!!!不执行没效果
action.perform()
sleep(2)
quit()
键盘操作
send_keys()
方法可以用来模拟键盘输入,我们还可以用它来输入键盘上
的按键,甚至是组合键,如 Ctrl+a
、Ctrl+c
等。
Keys.BACK_SPACE
:删除键。
Keys.SPACE
:空格键。
Keys.TAB
:Tab 键。
Keys.ESCAPE
:回退键。
Keys.ENTER
:回车键。
Keys.CONTROL,”a”
:组合键 Ctrl + A。
Keys.CONTROL,”x”
:组合键