软测入门(三)Selenium(Web自动化测试基础)

这篇具有很好参考价值的文章主要介绍了软测入门(三)Selenium(Web自动化测试基础)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium(Web端自动测试)

Selenium是一个用于Web应用程序测试的工具:中文是

  • 开源
  • 跨平台:linux、windows、mac
  • 核心:可以在多个浏览器上进行自动化测试
  • 多语言

Selenium WebDriver控制原理

  • Selenium Client Library:通过他们提供的库来编写脚本,可以使用Java、Python等进行编写脚本
  • JSON Wire Protocol是在HTTP服务器之间传输信息的REST风格的API。
  • Browser Drivers:浏览器驱动,不同浏览器会有一个单独的浏览器驱动程序
  • Browsers:Selenium 支持的浏览器,Firefox、Chrome、IE、Safar等

安装环境

  • Python 3.5以上

  • 安装PyCharm

  • 安装selenium包(在pycharm或者cmd中)

    # 安装
    pip install selenium
    
    # 卸载
    pip uninstall selenium
    
    # 查看
    pip show selenium
    
  • WebDriver安装

    谷歌Driver国内镜像:http://npm.taobao.org/mirrors/chromedriver/

    注意要去下载和自己电脑谷歌浏览器相匹配的版本

    全局:下载解压缩后,可以将webdriver的路径配置到环境变量中,方便使用

    局部:下载解压缩后,将可执行文件放入到本地项目目录中

入门案例

import time

from selenium.webdriver.chrome.service import Service
from selenium import webdriver

# 定义chrome驱动去地址
path =  Service('chromedriver.exe')

# webdriver 获取浏览器对象
driver = webdriver.Chrome(service = path)

# 准备一个网址
url = "https://www.baidu.com/"
driver.get(url)

# 模拟时间
time.sleep(5)

# 回收资源
driver.quit()

元素定位

普通定位

如百度的输入框,输入文字后+点击查询

selenium service,自动化测试,前端,selenium,python,自动化

通过ID定位那么可以在代码中进行定位

from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 定义chrome驱动去地址
path = Service('chromedriver.exe')

# webdriver 获取浏览器对象
driver = webdriver.Chrome(service=path)

# 准备一个网址
url = "https://www.baidu.com/"
driver.get(url)

# 根据id查询到元素,发送关键词
driver.find_element(By.ID, "kw").send_keys("阿卡丽")

# 同理找到查询按钮的id,执行click事件
driver.find_element(By.ID, "su").click()

time.sleep(5)

# 回收资源
driver.quit()

其他定位:name,tag_name,class_name等

selenium service,自动化测试,前端,selenium,python,自动化

a标签定位

# 定位a标签, link_text | partial_link_text
# 方式一(完整)
driver.find_element(By.LINK_TEXT, "hao123").click()

# 方式二(模糊)
driver.find_element(By.PARTIAL_LINK_TEXT, "hao1").click()

需要注意的是:如果相同的规则会对应多个标签,那么这些方法只会返回第一个标签,除非使用的是find_elements()方法

CSS选择器定位

了解下CSS选择器基本知识

selenium service,自动化测试,前端,selenium,python,自动化

# 通过CSS选择器
# id
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("阿卡丽")
# 属性选择器
driver.find_element(By.CSS_SELECTOR, "[name=wd]").send_keys("阿卡丽")

xpath获取元素

xpath=xml path

selenium service,自动化测试,前端,selenium,python,自动化

selenium service,自动化测试,前端,selenium,python,自动化

selenium service,自动化测试,前端,selenium,python,自动化

# 通过XPAth定位
driver.find_element(By.XPATH, "//*[@id='kw']").send_keys("阿卡丽")
driver.find_element(By.XPATH, "//*[@id='su']").click()

driver.find_element(By.XPATH, "//*[text()='hao123']").click()

浏览器其他操作

selenium service,自动化测试,前端,selenium,python,自动化

# 设置最大化
driver.maximize_window()

# 设置浏览器 宽高像素
driver.set_window_size(1920, 1080)

# 设置窗口位置
driver.set_window_position(200, 200)

# 刷新
driver.refresh()

# 前进
driver.forward()

# 后退
driver.back()

# 关闭 当前页面
driver.close()

# 关闭浏览器
driver.quit()

# 获取浏览器属性
print(driver.title) 
print(driver.current_url)

页面等待

某些html元素可能加载稍微慢些,那么我们的测试脚本就需要进行页面等待完毕后,再执行测试过程。

等待方式:

  • 强制等待(不推荐)

    time.sleep(1)
    
  • 显示等待(导包太多,麻烦)

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, "//*[@id='1']/div/div[1]/div/div[2]/a[2]/img")))
    driver.find_element(By.XPATH, "//*[@id='1']/div/div[1]/div/div[2]/a[2]/img").click()
    
  • 隐式等待

    # 隐式等待(等所有的元素)
    driver.implicitly_wait(5)
    

元素操作

操作

  • clear() 清除文本
  • send_keys() 模拟输入
  • click() 单击元素

元素属性获取

  • size : 返回元素大小
  • text :获取元素文本
  • get_attribute() 获取某个属性值
  • is_display() :元素是否可见
  • is_enabled() :元素是否可用
# 清除文本
driver.find_element(By.ID, "kw").clear()

print(driver.find_element(By.ID, "kw").size)                # 获取大小
print(driver.find_element(By.ID, "kw").text)                # 获取文本
print(driver.find_element(By.ID, "kw").is_enabled())        # 是否可用
print(driver.find_element(By.ID, "kw").is_displayed())      # 是否显示

print(driver.find_element(By.XPATH, "//*[text()='新闻']").get_attribute("href"))  # 获取属性

##########
{'height': 43, 'width': 549}

True
True
http://news.baidu.com/

模拟鼠标操作

selenium模拟鼠标操作:

  • 创建ActionChains对象,使用ActionChains对象的方法进行操作
    • context_click() : 鼠标右击
    • double_click() : 鼠标双击
    • drag_and_drop():拖动
    • move_to_element() : 悬停
  • 通过perform()执行以上的鼠标操作方法
import time

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)

action = ActionChains(driver)


action.context_click(driver.find_element(By.ID, "su")) # 右键
action.move_to_element(driver.find_element(By.CLASS_NAME, "soutu-btn")) # 悬停
action.drag_and_drop(driver.find_element(By.ID,"div1"), driver.find_element(By.ID,"div2")) # 拖拽,把一个元素拖拽到另一个元素中

# 执行
action.perform()

time.sleep(5)

driver.quit()

键盘操作

  • send_keys()

Keys类中封装了所有的键盘操作

selenium service,自动化测试,前端,selenium,python,自动化

实例

import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = "https://www.baidu.com/"
driver.get(url)

el = driver.find_element(By.ID, "kw")
# 输入Python
el.send_keys("Python")
time.sleep(2)

# ctrl+a 全选
el.send_keys(Keys.CONTROL, "a")
# 退格
el.send_keys(Keys.BACKSPACE)

# 输入其他
el.send_keys("阿卡丽")
time.sleep(2)

el.send_keys(Keys.CONTROL, "a")
time.sleep(2)
# 复制
el.send_keys(Keys.CONTROL, "c")

el.send_keys(Keys.CONTROL, "a")
time.sleep(2)

# 粘贴
el.send_keys(Keys.CONTROL, "v")


time.sleep(5)

driver.quit()

下拉框

通过Select对象来处理,记得导Select

driver = webdriver.Chrome()
url = "https://manager.hezhuyun.net/"

driver.get(url)
# 获取页面 下拉框并且转换为 Select对象
select = Select(driver.find_element(By.ID, "selectA"))

# 根据索引选择
select.select_by_index(2)

# 根据value 值选择
select.select_by_value("bj")

# 根据 option 文本选择
select.select_by_visible_text("广州")

页面滚动

有些页面数据过多,采用懒加载模式,那么我们要选取一些懒加载元素,就必须触发页面滚动,让元素加载出来。

我们需要使用驱动来执行js的浏览器页面滚动代码来实现。

# 触发调动js代码 x轴不滚动, y轴向下滚动(当y轴滚动超过屏幕时将自动到最底部)
js_tr = 'window.scrollTo(0,10000)'
# 触发调动js代码
driver.execute_script(js_tr)

警告框

<button id="alertAAA" onclick="alert('我是警告框')">我是警告框</button>
driver = webdriver.Chrome()
url = "file:///D:/environment/python-workspace/testPY/index.html"

driver.get(url)

# 模拟一个弹框出现,点击 alterAAA后出现了一个警告框
driver.find_element(By.ID, "alertAAA").click()

# 获取警告框对象
alert = driver.switch_to.alert
print(alert.text)

time.sleep(2)
# 确定
alert.accept()
# 取消
# alert.dismiss()

time.sleep(5)

driver.quit()

Frame切换

需要注意:在一个网页中如果使用了iframe标签嵌套网页,那么对于驱动来讲,只能获取到当前的网页,嵌套的内部网页一般无法去获取里面的元素。那么就需要用到了Frame切换

切换Frame后如果需要外部网页的元素,那么还要再切换回去。

import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = "https://mail.qq.com"

driver.get(url)

driver.implicitly_wait(2)

# 原始页面的元素
print(driver.find_element(By.CLASS_NAME, "login_pictures_title").text)
# 切换至内部frame
driver.switch_to.frame("login_frame")
driver.find_element(By.ID, "u").send_keys("100001")

# 切换回原始页面里
driver.switch_to.default_content()
# 原始页面的元素
print(driver.find_element(By.CLASS_NAME, "login_pictures_title").text)

time.sleep(5)

driver.quit()

当然还有 switch_to.parent_frame()方法可回到父级的frame中。

页面窗口切换

浏览器中的多标签页的切换。handle意为控制者,在selenium中,通过一个随机生成的UUID来标识某个窗口。

需要先获取到标签页的句柄 handle

# 获取所有
driver.window_handles
# 获取当前的 handle
driver.current_window_handle

# 切换
driver.switch_to.window(handleName)


########################################实例###########################################
import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
url = "https://www.baidu.com"

driver.get(url)
driver.maximize_window()

time.sleep(2)
print(driver.window_handles)

driver.find_element(By.ID, "kw").send_keys("阿卡丽")
driver.find_element(By.ID, "su").click()

driver.implicitly_wait(2)
driver.find_element(By.XPATH, "//*[@id='1']/div[1]/div[1]/div/div[1]/a[1]/img").click()

# 关闭上一个
driver.close()
# 由于现在只剩一个了,直接选择第一个handle即可
driver.switch_to.window(driver.window_handles[0])

driver.find_element(By.XPATH, "//*[@id='srcPic']/img").click()

time.sleep(5)
driver.quit()

截图

# 获取文件截图
driver.get_screenshot_as_file("imgs.png")

# 获取截图二进制数据流 bytes
#driver.get_screenshot_as_png()

Cookie处理

添加Cookie,需要涉及到登录或其他业务必须添加时文章来源地址https://www.toymoban.com/news/detail-661766.html

driver.add_cookie({"name":"DBUSS", "value":"通过Chrome浏览器工具查看"})

到了这里,关于软测入门(三)Selenium(Web自动化测试基础)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【自动化测试入门】Selenium基础(建议收藏)

    1、什么是 Selenium Selenium  是支持  Web  浏览器自动化的一系列工具和库的综合项目。 它提供了扩展来模拟用户与浏览器的交互,用于扩展浏览器分配的分发服务器, 以及用于实现  W3C WebDriver  规范的基础结构, 该 规范 允许您为所有主要  Web  浏览器编写可互换的代码。

    2024年02月09日
    浏览(13)
  • web自动化测试入门篇03——selenium使用教程_(2)在上述学习基础上,自行选择一个合适的网站,进一步在实践中去运用selenium webd(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月27日
    浏览(13)
  • 【python】之selenium模块,实现Web端自动化测试!【基础篇】

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接调用浏览器,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏等。我们可以使用selenium很容易完成之

    2024年02月06日
    浏览(12)
  • 【自动化测试入门】用Airtest - Selenium对Firefox进行自动化测试(0基础也能学会)

    本文将详细介绍如何使用AirtestIDE驱动Firefox测试,以及脱离AirtestIDE怎么驱动Firefox(VScode为例)。看完本文零基础小白也能学会Firefox浏览器自动化测试!!! 对于Web自动化测试,目前AirtestIDE支持chrome浏览器和Firefox2种浏览器,今天我们重点聊一下,如何使用AirtestIDE驱动Firef

    2024年02月07日
    浏览(12)
  • 基于web应用的UI自动化、跨浏览器测试、测试结果分析:Selenium 开源的自动化测试工具基础教程

    作者:禅与计算机程序设计艺术 Selenium是一个开源的自动化测试工具,它提供了基于web应用的UI自动化、跨浏览器测试、测试结果分析等功能。它提供的功能包括:自动化控制浏览器、操纵表单、点击链接及按钮、验证页面元素、执行JavaScript代码、生成PDF文件、模拟移动设备

    2024年02月09日
    浏览(12)
  • Python WEB UI自动化测试(1)-Selenium基础(史上最详细,一篇就够)

    命令行安装 找到本地chrome的浏览器的版本 下载相应版本的驱动器 chrome浏览器驱动下载 地址:chromedriver.storage.googleapis.com/index.html 下载完后,解压到本地的python的目录下 geckodriver: https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html edgedriver: https://developer.microsoft.com/en-us/m

    2024年02月03日
    浏览(17)
  • 自动化测试之web自动化(Selenium)

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! yycnblog 自动化测试概念:让程序代替人为去验证程序功能的过程,本

    2024年03月15日
    浏览(30)
  • Web自动化测试--selenium

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! Selenium 是支持web浏览器自动化的一系列工具和库的综合项目,能够进

    2024年03月14日
    浏览(28)
  • selenium - web 自动化测试

    有效的减少人力的消耗, 同时提高生活的质量. 通过自动化测试有效减少人力的投入, 同时提高了测试的质量和效率. 测试人员有个环节叫做回归测试. 回归测试 : 对历史版本, 历史功能进行测试, 保证功能都是符合要求的. 为什么需要回归测试历史版本 ? 因为新版本和旧版本一般

    2024年02月04日
    浏览(11)
  • 【自动化测试】基于Selenium + Python的web自动化框架

    Selenium是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid:  1、Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,p

    2024年02月07日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包