web界面:
html:内容的表达
css:样式布局
javascript:动态处理页面+用户响应
元素有3个特征:标签名,属性,文本内容
style:内联样式,直接在元素上通过style属性来设置样式,display:none 表示不显示
id:唯一性
class:不是唯一,可以有多个class值,中间空格隔开
name:不是唯一

元素的状态:
存在:存在html中
可见:在存在html的前提下,有可见和不可见
可用:在可见的前提下,元素有可用和不可用

8位定位方式 - html页面
定位:在整个html中根据元素特色去找;
id:元素id的属性
class:元素的class属性
tag:元素的tag属性
name:元素的name属性
针对a元素:
link_text:针对a元素的文本内容 -完全匹配
partial_link_text:针对a元素的文本内容- 包含
xpath
css

#selenium介绍与安装
selenium --工具包
selenium ide :录制工具
webdriver:第三方库,结合代码使用
grid:分布式
安装第三方库: pip install -U selenium

web自动化环境:
人----浏览器----操作页面
代码----浏览器----操作页面
浏览器驱动:
ie: ieserverdriver
chrome:chromedriver
firefox: fgeckodriver
附上 浏览器驱动下载地址汇总:
http://npm.taobao.org/mirrors/chromedriver/ #镜像

Chrome: https://sites.google.com/a/chromium.org/chromedriver/downloads .
国内镜像地址:http://npm.taobao.org/mirrors/chromedriver/
Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox: https://github.com/mozilla/geckodriver/releases
Safari: https://webkit.org/blog/6900/webdriver-support-in-safari-10/


1、引入第三方库
from selenium import webdriver
from selenium.webdriver.common.by import By
2、打开浏览器
driver = webdriver.Chrome()
3、访问页面,如:百度
driver.get("http://www.baidu.com")
sleep(5)
#关闭当前窗口,不会清除临时文件夹中的 WebDriver 临时文件
driver.close()
关闭浏览器,关闭会话,删除临时文件夹
driver.quit()
#如果只有一个窗口那么quit()和 close()没有区别
-------------------------扩展------------------------------------
# 根据xpath选择元素
driver.find_element(By.XPATH, '//*[@id="kw"]')

# 根据css选择器选择元素
driver.find_element(By.CSS_SELECTOR, '#kw')

# 根据name属性值选择元素
driver.find_element(By.NAME, 'wd')

# 根据类名选择元素
driver.find_element(By.CLASS_NAME, 's_ipt')

# 根据链接文本选择元素
driver.find_element(By.LINK_TEXT, 'hao123')

# 根据包含文本选择
driver.find_element(By.PARTIAL_LINK_TEXT, 'hao')

# 根据标签名选择
# 目标元素在当前html中是唯一标签或众多标签第一个时候使用
driver.find_element(By.TAG_NAME, 'title')

# 根据id选择
driver.find_element(By.ID, 'su')

element.size #获取窗口大小
element.title #获取浏览器title
dr.refresh()   #刷新页面
time.sleep(2)
dr.back() #后退
time.sleep(2)
dr.forward() #前进
# action = ActionChains(dr)   #实例化鼠标对象
# action.context_click(el) #在元素上右键
# action.move_to_element(el) #鼠标悬停
# action.perform() # 鼠标执行操作!!!不执行没效果

el.send_keys(Keys.BACK_SPACE) #删除键,单个字符删除
sleep(.5)
el.send_keys(Keys.BACK_SPACE)
sleep(.5)
el.send_keys(Keys.BACK_SPACE)
sleep(2)
el.send_keys(Keys.CONTROL,'a') #全选
sleep(.5)
el.send_keys(Keys.CONTROL,'x') #剪切
sleep(1)
el.send_keys(Keys.CONTROL,'v') #粘贴

参考网站:自动化测试——selenium(完结篇)
设置隐式等待
driver.implicitly_wait(30)

运行时,当遇到报错“"no such element:Unable to locate element"”,先检查元素是否正确,如果是正确的,那么元素还没有加载出来,此时没有找到
 就会遇到异常,此时需要等待元素加载;
等待方式:
1、sleep:强制等待
2、implicitly_wait:隐形式等待

元素在iframe中(即html页面中嵌套了一个html(iframe)
1、分辨元素是否在iframe当中
2、在代码当中,从当前的html,切换到iframe当中的html,然后再找元素
driver.switch_to.frame(索引/name属性/webelement对象)
如:iframe = driver.find_element_by_xpath('//*[@id="x-URS-iframe1676947929737.601"]') #先找到该iframe XPATH,然后切换
driver.switch_to.frame(iframe)

----窗口切换:
在一个html点击某一个链接跳转打开新的窗口: driver.switch_to.window(句柄)
1.获取当前会话浏览器的所有窗口**
所有窗口句柄(列表) wins =driver.window_handles
2.切换到指定窗口
driver.switch_to.window(wins[-1]) #列表最后一个是最新的窗口
实例:

#打开百度,输入python,点击搜索
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

dr = webdriver.Chrome()
dr.get("http://www.baidu.com")
# dr.get("http://172.16.200.41/warning-fault")
dr.maximize_window()
time.sleep(2)
#1、搜索框中输入‘python'并进行搜索
dr.find_element(By.ID,'kw').send_keys('python')
dr.find_element(By.ID,'su').click()
time.sleep(5)
# dr.find_element(By.XPATH,"//a[text()='简介 | 菜鸟教程']").click()
#2、点击搜索结果中“简介 | 菜鸟教程”,跳转打开新的窗口
loc=(By.XPATH,'//*[@id="9"]/div/div[1]/h3/a')
wait = WebDriverWait(dr,5)
wait.until(EC.visibility_of_element_located(loc))
dr.find_element(*loc).click()
#3、切换到新窗口
time.sleep(1)
win_hans =dr.window_handles #列表,获取当前会话浏览器的所有窗口
dr.switch_to.window(win_hans[-1])
print('获取所有窗口句柄:',win_hans)
print('当前窗口句柄:',dr.current_window_handle)

time.sleep(5)
#4、在新的窗口中进行操作
dr.find_element(By.XPATH,"//a[text()='HTML']").click()
time.sleep(2)
# dr.switch_to.window(win_hans[0]) #可再次切回到主窗口
time.sleep(2)
dr.quit()
 
 

---Alert 弹框处理

      在页面中操作时弹出alert弹框时,却不能往下进行操作,需要先把alert弹框关闭后才能进行下去;

    #切换
al = drvier.switch_to.alert
#关闭弹框
al.accept()
>>>更多参考:http://testingpai.com/article/1596527701066 
-----鼠标操作
示例:
#百度示例操作
from selenium.webdriver import ActionChains
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
# action = ActionChains(dr) #实例化鼠标对象
# action.context_click(el) #在元素上右键
# action.move_to_element(el) #鼠标悬停
# action.perform() # 鼠标执行操作!!!不执行没效果
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

dr =webdriver.Chrome()
dr.get("http://www.baidu.com")
dr.maximize_window()
sleep(2)
loc = (By.XPATH,"//*[@id='s-usersetting-top']")
el = dr.find_element(*loc)
sleep(2)
#鼠标实例化
action = ActionChains(dr)
action.move_to_element(el) #或 action.move_to_element(el).click(el)
action.perform() # 鼠标执行操作!!!不执行没效果
#获取’高级搜索‘元素并点击
loc =(By.XPATH,'//span[text()="高级搜索"]')
wait = WebDriverWait(dr,5)
wait.until(EC.visibility_of_element_located(loc))
dr.find_element(*loc).click()
sleep(2)
#点击出现下拉列表
loc =(By.XPATH,"//span[@id='adv-setting-ft']//div[contains(@class,'adv')]")
wait = WebDriverWait(dr,5)
wait.until(EC.visibility_of_element_located(loc))
dr.find_element(*loc).click()
#等待下拉列表出现后,选择一个元素并点击
loc =(By.XPATH,'//p[@data-value="xls"]')
wait = WebDriverWait(dr,5)
wait.until(EC.visibility_of_element_located(loc))
dr.find_element(*loc).click()
sleep(2)
dr.quit()

#------扩展-----

# s = Select(el)
# s.select_by_index(1) #通过索引index获取值,从 0开始
# s.select_by_value('02') #通过value值获取
# s.select_by_visible_text('王维') #通过文本方式选择目录信息值
# print(el.size) #获取窗口大小
 



posted on 2023-02-08 17:16  给天使看的戲  阅读(20)  评论(0编辑  收藏  举报