自动化测试selenium基础篇——webdriverAPI_selenium webdriver api(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

【3】操作测试对象

定位到元素之后,需要对定位的元素进行操作。webdriver中常见的操作对象的方法:

  • click:点击对象;
  • send_keys:在对象上模拟按键输入
  • clear:清楚对象输入的文本内容;
  • submit:提交表单;
  • text:用于获取元素的文本信息。

【4】添加等待

(1)sleep等待

引人入time包,调用sleep方法使其固定的休眠的一段时间。

from selenium import  webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
time.sleep(2)
browser.find_element_by_css_selector("#kw").send_keys("薛之谦")
browser.find_element_by_css_selector("#su").click()
#搜索薛之谦,等待5秒钟后点击百度百科
time.sleep(5)
browser.find_element_by_link_text("百度百科").click()
time.sleep(5)
browser.quit()

【需要注意】

上面的代码,如果去掉这个固定的休眠时间,就会如下的错误:

未找到链接文字“百度百科”,因为在点击之后搜索的页面还没有被加载出来,无法对元素进行定位。

(2)隐式等待(智能等待)

我们发现,如果设置sleep进行等待,可能会消耗大量的时间,所以可以添加implicitly_wait(time) 方法就可以方便的实现智能等待。选择一个时间范围内智能等待。

【工作原理】

隐式等待并非一个固定的等待时间。当脚本执行到某个元素的定位时,如果元素可以定位,则继续执行;如果元素定位不到,则以轮询的方式不断地判断元素是否被定位到,直到超出设置的时长。

【5】信息打印

打印页面的title和url:

from selenium import  webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
title=browser.title
print(title)
url=browser.current_url
print(url)

【6】 对浏览器的操作

  1. 浏览器最大化:调用启动的浏览器不是全屏的,有时候会影响我们观看脚本运行,使用maximize_window()方法对窗口进行最大化;
  2. 设置浏览器的宽高:set_window_size(width,high)
  3. 操作浏览器的前进后退:
    【1】前进:forward()
    【2】后退:back()
  4. 控制浏览器滚动条:浏览器的滚动条的控制需要哦依靠js脚本
    【1】将浏览器滚动条滑到最顶端:
# 距顶端的距离设置为零
driver.documentElement.scrollTop=0

【2】将浏览器滚动条滑动到最底端:

js="var q=document.documentElement.scrollTop=10000"
# excute_script()在当前窗口/框架同步执行js
driver.excute_script(js)

【7】键盘事件

【1】键盘按键

所有的键盘操作,必须建立到定位到元素的基础上(基于元素操作)。使用键盘按键,需要引入keys包:

from selenium.webdriver.common.keys import Keys

通过send_keys()方法调用按键:

send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车
send_keys(Keys.SPACE) #空格键
send_keys(Keys.ESCAPE) #回退键(Esc)
【2】键盘组合键
send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') #剪贴(Ctrl+X)
send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)

【8】鼠标事件

需要导入工具包ActionChains:

from selenium.webdriver.common.action_chains import ActionChains

ActionChains类

方法名说明
context_click()鼠标右击
double_ click()双击
drag_and_drop()拖动
move_to_element()移动

【9】复杂元素定位

(1)定位一组元素

webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们需要定位一组对象,需要使用findElements方法:

  • 批量操作对象,将页面上所有的checkbox都勾上
  • 先获取一组元素,再在这组对象中过滤出需要具体定位的一些对象。

例:勾选页面上所有的checkbox

from selenium import webdriver
import time
import os
driver=webdriver.Chrome()
# html文件所在路径
path='file:///'+os.path.abspath('C:\\Users\\Lenovo\\Desktop\\selenium2html\\checkbox.html')
driver.get(path)
# 选择页面上所有的input。然后过滤出checkbox并勾选
checkboxs=driver.find_elements_by_tag_name('input')
for checkbox in checkboxs:
    if checkbox.get_attribute('type')=='checkbox':
        checkbox.click()
time.sleep(5)
driver.quit()

(2) 多层框架定位

解决不同层框架上的页面的元素的定位:

  • 如果要定位一个层级框架中的元素,必须先跳到这个框架层级,才可以进行定位;
  • 如果要定位某一个层级,必须从默认的页面跳转。
  • 定位到一个层级:switch_to.frame(id)通过frame的id等属性来定位框架,将当前定位的主体切换到frame里;
  • switch_to.default_content():从frame中嵌入的页面里跳出,跳回到最外面的默认页面。
(3)层级定位

有时候我们需要定位的元素没有在页面直接展示,需要对页面元素进行一系列操作之后才展示出来,这时候我们需要一层层去定位。(通过鼠标事件进行操作)

例:打开本地html,点击link1后定位到其中一个栏使其高亮显示。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import os
driver = webdriver.Chrome()
path = 'file:///'+os.path.abspath('C:\\Users\\Lenovo\\Desktop\\selenium2html\\level_locate.html')
driver.get(path)
# 定位到link1,点击
driver.find_element_by_link_text('Link1').click()
driver.implicitly_wait(5)
# 定位Something else here
element = driver.find_element_by_link_text('Something else here')
# 鼠标移动到Something else here ,高亮显示
ActionChains(driver).move_to_element(element).perform()
time.sleep(4)
driver.quit()

(4)下拉框定位

对于一般的元素,我们只需要一次就定位,但下拉框的内容需要进行两次定位,先定位到下拉框对下拉框进行操作后,在定位到下拉框中的选项:

  • 直接使用xpath来定位
  • 先定位出一组元素,然后根据元素的属性进行过滤筛选,再进行具体操作;
  • 先定位出一组元素,再通过数组下标的方式定位

例:选中下拉框中的一个指定选项。

driver=webdriver.Chrome()
path='file:///'+os.path.abspath('C:\\Users\\Lenovo\\Desktop\\selenium2html\\drop_down.html')
driver.get(path)
time.sleep(2)
# 定位到下拉框
driver.find_element_by_id('ShippingMethod').click()
time.sleep(2)
# 根据下拉框的选项定位到value值等于8.34的选项
elements=driver.find_elements_by_tag_name('option')
for element in elements:
    if element.get_attribute('value')=='8.34':
        element.click()
time.sleep(4)
driver.quit()

【10】 特殊情况的处理

(1)alert弹框的处理
  • 定位弹出框/获取弹出框的操作句柄:switch_to.alert;
  • 关闭弹框:accept();
  • alert弹框中输入信息:send_keys()

例:定位到点击按钮,跳出弹框,在弹框中输入内容,关闭弹框

from selenium import webdriver
import time
import os
driver=webdriver.Chrome()
path='file:///'+os.path.abspath('C:\\Users\\Lenovo\\Desktop\\selenium2html\\send.html')
driver.get(path)
# 定位元素,点击,出现弹出框
driver.find_element_by_tag_name("input").click()
time.sleep(4)
# 定位弹出框
alert=driver.switch_to.alert
# 弹出框中输入信息
alert.send_keys("大秃噜")
time.sleep(2)
# 关闭弹框
alert.accept()
time.sleep(5)
driver.quit()

(2)div块的处理

如果页面的元素比较多,利用元素的属性无法请确的定位到这个元素的时候,我们可以先定位这个元素所在的div块,再去定位这个元素。

  • 首先定位到div模块;
  • 再去精确寻找需要定位的元素。
(3)上传文件

上传文件一般要打开一个本地窗口,从窗口选择本地文件添加。我们需要考虑如何添加上传文件:定位到上传按钮,通过send_keys添加本地文件路径就行。(绝对路径和相对路径都可以)

为什么有些第三方网站的页面元素无法进行定位?

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

件路径就行。(绝对路径和相对路径都可以)

为什么有些第三方网站的页面元素无法进行定位?

[外链图片转存中…(img-CL3EKIBu-1715535731692)]
[外链图片转存中…(img-UjrZHw1M-1715535731692)]
[外链图片转存中…(img-89Q5WuW4-1715535731693)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值