【自动化测试】搭建selenium测试环境 & selenium基础详解

1.selenium 概要

综合性项目, 包含一系列的工具和库, 可以用于web自动化、爬虫、刷单、抢票。。。

主要特点:

  • 开源
  • 兼容性
  • 支持多种编程语言
  • 执行并行测试

selenium 三大组件

  • IDE : 录制用例
  • webdriver: 执行用例
  • Grid : 分布式执行

2.搭建selenium自动化测试环境

元素:python -> selenium ->驱动 -> 浏览器

1.传统搭建

1. 安装selenium
pip install selenium
2. 安装浏览器驱动(以google示例)
  1. 查看浏览器版本号
  2. 下载浏览器驱动
    https://npm.taobao.org/mirrors/chromedriver/
  3. 将浏览器放在系统path路径下
  4. 在cmd输入驱动名称 webdriver
3. 验证环境搭建成功
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.quit()

2.自动化搭建

1.添加私有仓库
pip config set global.extra-index-url https://beifan:[email protected]/simple
pip config set global.index-url = https://mirrors.aliyun.com/pypi/simple
2.安装私有工具
pip install webdriver-helper 
pip install packaging

#  如加 -u 表示自动升级到最新版
3. 验证环境搭建成功
from webdriver_helper.driver import get_webdriver

driver = get_webdriver()
driver.get("http://baidu.com")
driver.quit()

区别:

  • webdriver.chorme() 从path中寻找浏览器驱动, 找不到报错
  • get_webdriver() 从.wdm目录中寻找浏览器驱动, 找不到自动下载

找到驱动之后,一切用法一致

3.Selenium 原理

大牛推荐学习方式:

  • 观察
  • 验证

1. 启动浏览器

  1. 实例化webdriver类
  2. 进行参数判断
  3. 实例化service 类
  4. 调用子进程启动chromedriver : 浏览器驱动
  5. 调用http接口
  6. 返回webdriver实例

2.控制浏览器

  1. 调用webDriver实例方法: get 、quit …
  2. 调用统一的方法: execute
  3. 调用HTTP接口
  4. 返回接口结果

3.控制页面

  1. 调用webDriver实例化方法: find_element()
  2. 返回webElement实例
  3. 调用WebElement方法: send_keys()
  4. 调用HTTP接口

结论

  1. 浏览器 被 浏览器驱动控制
  2. 浏览器驱动 被 接口参数控制
  3. 接口参数 被 webDriver 和 webElement 实例控制

python web自动化测试控制链路:

python -> webDriver、webElement -> HTTPAPI ->chromedriver -> chrome

4.验证http接口可以完成浏览器的控制

postman

  1. 接口
  2. 接口文档: https://www.w3.org/TR/webdriver/

控制步骤:
1.启动浏览器
2.跳转到百度
3. 在输入框输入: xxx
4. 关闭浏览器

1. 启动驱动程序

终端输入: chromedriver.exe
在这里插入图片描述

2. HTTP启动浏览器

请求

post  127.0.0.1:9515/session

{
    "capabilities": {
        "alwaysMatch": {
            "cloud:user": "alice",
            "cloud:password": "hunter2",
            "platformName": "windows"
        },
        "firstMatch": [
            {"browserName": "chrome"}
        ]
    }
}

**返回 **

{
    "value": {
        "capabilities": {
            "acceptInsecureCerts": false,
            "browserName": "chrome",
            "browserVersion": "103.0.5060.114",
            "chrome": {
                "chromedriverVersion": "103.0.5060.53 (a1711811edd74ff1cf2150f36ffa3b0dae40b17f-refs/branch-heads/5060@{#853})",
                "userDataDir": "C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\scoped_dir5996_1859030467"
            },
            "goog:chromeOptions": {
                "debuggerAddress": "localhost:63829"
            },
            "networkConnectionEnabled": false,
            "pageLoadStrategy": "normal",
            "platformName": "windows",
            "proxy": {},
            "setWindowRect": true,
            "strictFileInteractability": false,
            "timeouts": {
                "implicit": 0,
                "pageLoad": 300000,
                "script": 30000
            },
            "unhandledPromptBehavior": "dismiss and notify",
            "webauthn:extension:credBlob": true,
            "webauthn:extension:largeBlob": true,
            "webauthn:virtualAuthenticators": true
        },
        "sessionId": "4128af60f25ea27569ee71702436dc86"
    }
}

3. 跳转至baidu

POST  127.0.0.1:9515/session/4128af60f25ea27569ee71702436dc86/url
 
body   {"url": "https://baidu.com"}

respones
{
    "value": null
}

4.定位输入框

POST  127.0.0.1:9515/session/8206d92324240cb8726bdce1ac36e6fe/element
 
body   {"using": "xpath","value":"//*[@id='kw']"}

respones
{
    "value": {
        "element-6066-11e4-a52e-4f735466cecf": "317a611e-be72-46bb-b690-f6e5f5610b3a"
    }
}

5.输入 xxx

POST  127.0.0.1:9515/session/8206d92324240cb8726bdce1ac36e6fe/element/317a611e-be72-46bb-b690-f6e5f5610b3a/value
 
body   {"type": "typing","text":"xxxx"}

respones
{
    "value": null
}

6.关闭浏览器

DELETE  127.0.0.1:9515/session/8206d92324240cb8726bdce1ac36e6fe
 
respones
{
    "value": null
}

结论
selenium 封装了对接口的调用, 使用面向对象的方式, 通过对webDriver 、webElement实例方法调用完成复制的、关联性的浏览器控制。 换个角度想,selenium 完成对接口的封装

你可能感兴趣的:(软件自动化,selenium,python)