web自动化测试进阶

Selenium API高级

  1. 多标签之间的切换 场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。 1)获取所有窗口的句柄 handles = driver. window_handles 调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。 2)通过窗口的句柄进入的窗口 driver.switch_to_window(handles[n]) driver.switch_to.window(handles[n]) 通过窗口句柄激活进入某一窗口
  2. 多表单切换 在网页中,表单嵌套是很常见的情况,尤其是在登录的场景 1)什么是多表单? 实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面 2)处理方法 直接使用id值切换进表单 driver.switch_to.frame(value)/driver.switch_to_frame(value) 定位到表单元素,再切换进入 el = driver.find_element_by_xxx(value) driver.switch_to.frame(el) /driver.switch_to_frame(el)
  3. 弹出框操作 1) 进入到弹出框中 driver.switch_to.alert 2) 接收警告 accept() 3) 解散警告 dismiss() 4) 发送文本到警告框 send_keys(data)
滚动条操作
js = ‘window.scrollTo(0,b)‘          #b表示距离定位的距离 
driver.execute_script(js)            #执行js脚本
滚动条回到顶部
js = "window.scrollTo(0,0)"或者
js=“var q=document.documentElement.scrollTop=0“
滚动条回到底部
js = “window.scrollTo(0,document.body.scrollHeight)”或者
js="var q=document.documentElement.scrollTop=10000“
滚动条拉到指定位置(具体元素):--最常用
target = driver.find_element_by_id(“id_keypair”)  #定位移动到的元素
driver.execute_script("arguments[0].scrollIntoView();", target)
参考:https://blog.csdn.net/qq_39247153/article/details/81902559
元素定位方法的分类(调用方式)
  1. 直接调用型(推荐方式)
    driver.find_element_by_xxx(value)
  2. 使用By类型(需要导入By)
    from selenium.webdriver.common.by import By             
 
    driver.find_element(By.xxx,value)

元素的点击和输入

点击操作
element.click()
清空/输入操作(只能操作可以输入文本的元素)

element.clear()            清空输入框             
 
    element.send_keys(data)        输入数据
from selenium import webdriver
 
driver = webdriver.Firefox()
#跳转到58同城
driver.get(“https://bj.58.com/?utm_source=market&spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT”)
#根据查询页面得租房 并点击
driver.find_element_by_partial_link_text(“租房”).click()
#跳转到页面窗户得第2个窗口
driver.switch_to.window(driver.window_handles[1])
#点击页面得 昌平 (F12)元素定位到 xpath
driver.find_element_by_xpath("/html/body/div[5]/div[2]/div[2]/dl[1]/dd/a[4]").click()
#根据 昌平 找到昌平地区得二级区域,,(F12) 元素定位到xpath
driver.find_element_by_xpath(’/html/body/div[5]/div[2]/div[2]/dl[1]/dd/div/a[3]’).click()
#(F12) 元素定位到xpath,并输入参数1000
driver.find_element_by_xpath(’//*[@id=“secitem-rent”]/dd/span/span[1]/input’).send_keys(1000)
#(F12) 元素定位到css,并输入参数3000
driver.find_element_by_css_selector(’#secitem-rent > dd > span > span:nth-child(3) > input[type=text]’).send_keys(3000)
#模糊查询价格筛选 并单击
driver.find_element_by_partial_link_text(“价格筛选”).click()

请添加图片描述

鼠标和键盘操作 手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供 1)鼠标操作 导入动作链类,动作链可以储存鼠标的动作 from selenium.webdriver import ActionChains 获取元素 el = driver.find_element_by_xxx(value) context_click(el) 对el执行右击 执行ActionChains中储存的所有动作 perform() 例如:ActionChains(driver).context_click(ele).perform() 点击鼠标右键 ActionChains(driver). click(ele).perform() 点击鼠标左键 ActionChains(driver).move_to_element(el).perform() 鼠标悬停

鼠标和键盘操作 1)键盘操作 键盘操作使用的是Keys类,一般配合send_keys使用 * 导入 from selenium.webdriver.common.keys import Keys * 常用键盘操作 send_keys(Keys.BACK_SPACE) 删除键(BackSpace) send_keys(Keys.SPACE) 空格键(Space) send_keys(Keys.TAB) 制表键(Tab) send_keys(Keys.ESCAPE) 回退键(Esc) send_keys(Keys.ENTER) 回车键(Enter) send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)

鼠标和键盘操作 1)键盘操作 * 常用键盘操作 send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A) send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X) send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V) send_keys(Keys.F1) 键盘 F1 …… send_keys(Keys.F12) 键盘 F12 案例: 必应搜索执行键盘操作

强制等待

导入定时等待库 from time import sleep 或者 import time time.sleep(10) # 表示强行等待10s在执行下一句代码 这种等待方式时间到了就会执行下个语句,但比较死板,不能保证在等待的时间内元素真正被加载了出来。而且如果等待的元素已经被加载出来,还需要等待到时间才会执行下一句,浪费时间。

浏览器等待
  1. 为什么要进行等待? 1.网速慢 2.网站内容过多 3.如果不进行等待而直接定位元素,可能会抛出异常 2) selenium中等待的分类: 强制等待 显示等待 隐式等待
隐藏等待

driver.implicitly_wait(30) #等待30s 这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。 这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。 注:隐式等待的作用域是全局,所以一般设置在整局代码的头几行。 隐式等待采用全部设置,也就是说,你所有的findElement方法都会最多等待30s

显示等待

需要导入的包 from selenium.webdriver.support.wait import WebDriverWait #导入显性等待的包 from selenium.webdriver.support import expected_conditions as EC #判断所需要的元素是否已经被加载出来 from selenium.webdriver.common.by import By #定位 WebDriverWait类是由WebDirver 提供的等待方法。显示等待明确的要等到某个元素的出现,在设置时间内每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截止。如果超时就会抛出异常。 例如:WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,“g-hu”))) 强制等待:傻瓜式等待,不智能 隐式等待:全局通用,只需设置一次,很智能(等到了就走,不会浪费时间) 显式等待:等待元素处于特定条件的时候使用,很智能(等到了就走,不会浪费时间)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清 醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值