IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium学习 -> 正文阅读

[开发测试]selenium学习

测试分类:

按开发阶段:单元、继承、系统、验收测试

按是否查看代码:黑盒、白盒、灰盒

按是否运行:静态、动态

按测试对象:性能、安全、兼容性、文档、用户体验、业务、界面、安装、内存泄漏

按测试实施的组织:a、b、第三方

按是否手工执行:手工、自动化

其他分类:冒烟、回归

selenium三剑客:
selenium webdriver:客户端API,测试人员通过调用这些接口访问浏览器驱动,浏览器驱动再访问浏览器

selenium ide:浏览器插件

selenium grid:大型项目测试,进行分布式扩容

selenium用于web应用程序自动化测试工具,直接运行在浏览器中,就像真正用户在操作一样。

特点:

开源、免费

多浏览器支持

多平台支持

多语言支持

支持分布式测试(使用selenium grid)

支持录制、回放和脚本生成(使用selenium ide)

驱动安装:

https://chromedriver.storage.googleapis.com/index.html

要对应浏览器的版本

测试:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome(executable_path=r'H:\mingw\chromedriver_win32.exe')
driver.get('http://www.baidu.com')
sleep(3)
driver.find_element_by_id('kw').send_keys('selenium')
sleep(3)
driver.find_element_by_id('su').click()

sleep(3)
driver.quit()

源码分析:

初始化重点:Service实例化,类似手动:

def test():
    import subprocess
    p = subprocess.Popen("chromedriver")
    p.communicate()

输出:

Starting ChromeDriver 98.0.4758.102 (273bf7ac8c909cde36982d27f66f3c70846a3718-refs/branch-heads/4758@{#1151}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

封装成单元测试:

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        
    def test(self):
        self.driver.get('http://www.baidu.com')
        sleep(3)
        self.driver.find_element_by_id('kw').send_keys('selenium')
        sleep(3)
        self.driver.find_element_by_id('su').click()
        
if __name__ == "__main__":
    case = TestCase()
    case.test()

selenium实现元素定位

driver.find_element_by_id()
driver.find_element_by_class_name()
driver.find_element_by_css_selector()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_tag_name()
driver.find_element_by_xpath()
driver.find_element_by_name()
driver = webdriver.Chrome(executable_path=r'H:\mingw\chromedriver_win32')
driver.get('http://www.baidu.com')
driver.maximize_window()
sleep(1)

element = driver.find_element_by_id('kw')
element.send_keys('selenium')
print(type(element))

driver.find_element_by_id('su').click()
sleep(3)

集成封装:

def get_element(driver, *loc):
    e = driver.find_element(*loc)
    return e

if __name__ == "__main__":
    from selenium.webdriver.common.by import By
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    get_element(driver, By.ID, 'kw').send_keys('selenim')
    get_element(driver, By.ID, 'su').click()

selenium webdriver和浏览器通信

对于每一条selenium脚本,创建一个http请求并发送给浏览器驱动

浏览器驱动中包含一个http server,用来接收这些请求

Http server接收到请求后根据请求具体操控对应浏览器

浏览器执行具体测试步骤

浏览器将步骤执行结果返回http server

http server将结果返回给selenium脚本,如果是错误的http代码会在控制台看到对应报错信息

webdriver使用的协议:(为什么可以python也可以java等)

json wire protocol

通信的数据格式是JSON

属性

driver.name
driver.current_url
driver.title
driver.page_source
driver.current_window_handle
driver.window_handles

核心webelement属性

id? ? ? ? ? ? ? ??

size? ? ? ? ? ??

rect

tag_name

text

方法

send_key()

clear()

click()

get_attribute()

is_selected()

is_enabled()

is_displayed()

value_of_css_property()

操作表单

定位表单元素

输入测试值

判断表单元素属性

获取表单元素属性

提交表单进行验证

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        path = os.path.dirname(os.path.abspath(__file__))
        file_path = 'file:///'+path+'/forms.html'
        self.driver.get(file_path)
        
    def test_login(self):
        self.driver.find_element_by_id('username').send_keys('admin')
        self.driver.find_element_by_id('pwd').send_keys('123')
        self.driver.find_element_by_id('submit').click()

checkbox和radiobutton

def test_checkbox(self):
    swimming = self.driver.find_element_by_name('swimming')
    if not swimming.is_selected():
        swimming.click()
        
    reading = self.driver.find_element_by_name('reading')
    if not reading.is_selected():
        reading.click()
    
    self.driver.quit()

下拉列表

处理弹框

三种等待方式

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-15 00:30:46  更:2022-04-15 00:31:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:32:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码