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的使用

Selenium使用(本资料以Google Chrome举例)

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。

安装

Windows:
    pip install selenium
Mac、Linux:
    pip3 install selenium

基本使用

1.创建浏览器对象并加载页面

from selenium import webdriver

# 创建Chrome浏览器对象
browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
# 加载页面
browser.get(URL)

2.打印页面源码

from selenium import webdriver

# 创建Chrome浏览器对象
browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
# 加载页面
browser.get(URL)

print(browser.page_source)

3.基本配置

from selenium import webdriver

# 创建设置对象
options = webdriver.ChromeOptions()

# 解决DevToolsActivePort文件不存在的报错
options.add_argument('--no-sandbox')

# 谷歌文档提到需要加上这个属性来规避bug
options.add_argument('--disable-gpu')

# 隐藏滚动条, 应对一些特殊页面
options.add_argument('--hide-scrollbars')

# 图片不加载选其一
# 不加载图片, 提升速度
options.add_argument('blink-settings=imagesEnabled=false')
# 不加载图片, 提升速度
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})

# 设置取消测试环境
options.add_experimental_option('excludeSwitches', ['enable-automation'])

# 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败(无头浏览器)
options.add_argument('--headless')

# 设置代理
option.add_argument('--proxy-server=socks5://代理服务器:端口')

# 避免终端下执行代码报错
options.add_experimental_option("excludeSwitches", ['enable-automation', 'enable-logging'])

# 设置配置
browser = webdriver.Chrome(options=options)

# 防止selenium被监测
# 先修改js,再加载js
browser.execute_cdp_cmd(
    "Page.addScriptToEvaluateOnNewDocument",
    {
        "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
    }
)

URL = 'https://www.baidu.com/'
# 加载页面
browser.get(URL)

4.控制浏览器窗口的大小

# WebDriver提供了set_windows_size()方法来设置浏览器的大小
browser.set_window_size(800, 800)  # 设置浏览器大小800*800

# 浏览器最大化
browser.maximize_window()

5.页面滚动

# selenium使用execute_script方法执行JavaScript操作
# scrollTo()方法可把内容滚动到指定的坐标。
max_y = 5000
y = 0
while y <= max_y:
    browser.execute_script(f'window.scrollTo(0,{y})')
    y += 500
    time.sleep(1)

6.前进后退

import time
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
time.sleep(1)
browser.get('https://www.taobao.com/')
time.sleep(1)
browser.get('https://www.jd.com/')
time.sleep(1)
# 后退
browser.back()
time.sleep(1)
# 前进
browser.forward()

7.浏览器选项卡切换

from selenium import webdriver
import time

browser = webdriver.Chrome()
# 打开百度页面
browser.get('https://www.baidu.com/')
# 打开新的选项卡
browser.execute_script('window.open()')
# 切换到新打开的选项卡
browser.switch_to.window(browser.window_handles[1])
# 打开淘宝页面
browser.get('https://www.taobao.com')
time.sleep(1)
# 切换回百度选项卡
browser.switch_to.window(browser.window_handles[0])

8.获取cookies

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
# 获取cookie
cookies = browser.get_cookies()
# 设置cookie
browser.add_cookie(cookies)
# 删除所有cookie
browser.delete_all_cookies()
print(browser.get_cookies())

9.查找单个元素

from selenium import webdriver

browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
browser.get(URL)
# 通过id属性查找百度页面logo地址
browser.find_element_by_id('s_lg_img').get_attribute('src')
# 通过CSS选择器查找百度搜索框
browser.find_element_by_css_selector('#kw')
# 以上两种方法仅为举例,不代表全部查找元素方法

10.查找多个元素

查找多个元素和查找单个元素相同,仅仅是将find_element换成了find_elements,

同时,find_elementfind_elements的区别就相当于select_oneselect的区别一样。

11.关闭浏览器窗口

browser.close()
# 或者
browser.quit()

"""
二者区别:
close方法是关闭当前的选项卡,如果是打开了多个选项卡,那么close关闭的是browser操作的当前选项卡,如果当前浏览器只打开一个选项卡,那么close方法相当于关闭浏览器了;
quit方法则是完全关闭所有选项卡,关闭浏览器。

那么问题来了,我们关闭浏览器应该采用那个方法呢?

当我们用webdriver打开浏览器时,会在系统盘产生临时文件,
如果使用close方法关闭浏览器,并不会主动清除系统盘的临时文件,
反之使用quit方法完全关闭浏览器会自动清除临时文件,减少对系统盘空间的占用。
所以,当你浏览器打开多选项卡时,只想关闭当前选项卡,就用close方法,但是关闭浏览器最好使用quit方法。
"""

12.元素交互动作

from selenium import webdriver
# 导入按键事件库
from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
URL = 'https://www.baidu.com/'
browser.get(URL)
# 通过id属性查找百度页面logo地址
browser.find_element_by_id('s_lg_img').get_attribute('src')
# 通过CSS选择器查找百度搜索框
search = browser.find_element_by_css_selector('#kw')
# 向搜索框中添加搜索内容
search.send_keys('手机')

# 回车进行搜索
search.send_keys(Keys.ENTER)
# 或者
# 查找点击搜索按钮
search_btn = browser.find_element_by_css_selector('#su')
# 点击事件
search_btn.click()

# 如果页面中存在iframe标签,需要先进行标签切换
# switch_to.frame() 默认可以直接取表单的id或name属性
browser.switch_to.frame('id或name属性')

# 从iframe标签切换出来
browser.switch_to.default_content()

13.等待

  • 隐式等待:无条件的等待

    原理:隐式等待就是在创建浏览器对象时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。

  • 显式等待:有条件的等待

    原理:显示等待就是指定一个等待条件,和一个最长等待时间,程序会判断在等待时间内条件是否满足,如果满足则返回,如果不满足会继续等待,超过时间就会抛出异常。

from selenium import webdriver

browser = webdriver.Chrome()
# 隐式等待
browser.implicitly_wait(10)    # 等待10秒钟
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
# 显式等待
wait = WebDriverWait(browser, 10)
# 等待指定元素加载成功
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input, button)
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 09:08:56  更:2021-11-26 09:09:06 
 
开发: 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 4:36:37-

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