一、前言

上篇文章我们学习了Selenium页面操作原理及如何高效的进行元素定位

那Selenium的工作原理又是什么?是如何驱动浏览器的呢?这篇文章为你讲解Selenium工作原理及Webdriver对浏览器的配置和操作。

Python测试交流群:8140 78962


文章目录

  • 一、前言
  • 二、Selenium工作原理
  • 三、Webdriver常用配置
    • 1. 启动浏览器
    • 2. Webdriver配置项
      • 2.1 首先调用对应的配置类(以chrome举例)
      • 2.2 最大化浏览器窗口
      • 2.3 隐藏浏览器运行(无界面Linux时,不加这条会报错)
      • 2.4 给予root执行权限(Linux上运行时需要)
      • 2.5 不加载图片,提升速度
      • 2.6 使用已打开的浏览器
      • 2.7 手动指定浏览器位置
      • 2.8 隐藏【受到自动化测试软件的控制】提示
      • 2.9 指定浏览器大小
      • 2.10 指定浏览器位置
      • 2.11 指定浏览器启动语言
      • 2.12 更换浏览器请求头
      • 2.13 设置浏览器代理
      • 2.14 使用配置
    • 3. Webdriver常用操作
      • 3.1 获取浏览器名称
      • 3.2 最大化浏览器窗口
      • 3.3 最小化浏览器窗口(Selenium4支持)
      • 3.4 全屏窗口
      • 3.5 访问指定网址
      • 3.6 获取当前页url
      • 3.7 获取当前页的title
      • 3.8 获取当前页窗口句柄
      • 3.9 截屏当前窗口
      • 3.10 刷新
      • 3.11 前进(浏览器的【前进】按钮)
      • 3.12 后退(浏览器的【后退】按钮)
      • 3.13 设置浏览器大小
      • 3.14 设置浏览器位置
      • 3.15 获取浏览器大小
      • 3.16 获取浏览器位置
      • 3.17 执行js脚本
      • 3.18 切换窗口
      • 3.19 切换iframe
      • 3.20 离开iframe
      • 3.21 关闭当前窗口
      • 3.22 退出浏览器
  • 四、总结

二、Selenium工作原理

Selenium进行自动化测试主要依赖三项:

  1. 测试脚本(你写的代码)
  2. 浏览器驱动(Webdriver,比如:chromedriver)
  3. 浏览器

其中核心部分就是Webdriver,它提供了一系列的API来供我们使用,以至于驱动浏览器做一些操作。
它的工作原理有时也会作为面试题,不少小伙伴Selenium用的很熟练,但因为答不出它的工作原理而被Pass!
所以我简单总结了一下,为了面试不被pass的标准答案

Webdriver工作原理:

webdriver用于通信用户编写的代码和浏览器。
当使用类似webdriver.Chrome()启动浏览器后,webdriver会将启动的浏览器绑定到特定的端口,并作为服务端 (类似前后端分离项目的后端)

客户端 (用户编写的代码),通过ComandExecutor发送HTTP请求给服务端
服务端通过WebService将其翻译为浏览器读的懂的脚本传给浏览器进行执行,执行完成后,浏览器把执行结果返回给WebService,WebService再把返回的结果做一些封装,然后返回给客户端。


三、Webdriver常用配置

1. 启动浏览器

通过查看Selnium->webdriver文件夹,发现Selnium支持6种浏览器:
chromeedgefirefoxieoperasafari


这里用谷歌、火狐的启动来举例

  1. 启动谷歌浏览器(需要chromedriver)
from selenium import webdriver
browser = webdriver.Chrome()

  1. 启动火狐浏览器(需要geckodriver)
from selenium import webdriver
browser = webdriver.Firefox()

2. Webdriver配置项

webdriver有很多配置项,例如设置请求头、隐藏浏览器运行、配置Webdriver路径等;下面为你介绍常用的配置项:

2.1 首先调用对应的配置类(以chrome举例)

chrome_options = webdriver.ChromeOptions()

2.2 最大化浏览器窗口

 chrome_options.add_argument('--start-maximized')

2.3 隐藏浏览器运行(无界面Linux时,不加这条会报错)

chrome_options.add_argument('--headless')

2.4 给予root执行权限(Linux上运行时需要)

chrome_options.add_argument('--no-sandbox')

2.5 不加载图片,提升速度

chrome_options.add_argument('blink-settings=imagesEnabled=false')

2.6 使用已打开的浏览器

以chrome浏览器举例,我们可以通过【cmd】在chrome所在目录执行命令:

chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"

-remote-debugging-port:用于配置浏览器启动占用的端口,可以指定任何未被占用的端口
-user-data-dir:指定创建新Chrome配置文件的目录;它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。


然后在代码中加入下面的配置即可使用刚刚打开的浏览器了

chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

这样做的好处是:

  1. 是一个由chrome启动的浏览器,不容易被所测网站检测出是自动化程序、有利于爬虫的过检测。
  2. 基于该运行浏览器所产生的缓存、cookie等数据都会被记录。下次启动的时候不用重新登录帐号,也不用因为没有缓存导致页面加载时间过长。

2.7 手动指定浏览器位置

当存在多个谷歌浏览器或谷歌浏览器环境异常时,可以指定其浏览器文件路径进行驱动

chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

2.8 隐藏【受到自动化测试软件的控制】提示


通过该配置项可以隐藏上图的提示

chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

2.9 指定浏览器大小

下面的代码会启动一个宽100,长1000的浏览器

chrome_options.add_argument(f'--window-size={100},{1000}')

2.10 指定浏览器位置

下面的代码会启动一个左边距为100,上边距为200的浏览器

chrome_options.add_argument(f'--window-position={100},{200}')

2.11 指定浏览器启动语言

有时候开启浏览器需要特别的语言版本,如果未进行配置则启动的是系统语言对应的浏览器,我们的被测网站如果是英文的,但系统是中文的,开启的浏览器就是中文的,提交的某些数据按照zh_CN.UTF-8的格式提交了,导致数据报错,那么我们就需要设置浏览器启动语言。

chrome_options.add_argument('lang=en-us')

2.12 更换浏览器请求头

有时候需要模拟手机访问某些页面的时候,可以通过配置user-agent项来实现
下面的代码会将浏览器模拟为安卓手机访问

user_ag = 'MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 7.3.7; zh-cn; MB200 Build/GRJ22;CyanogenMod-7) ' \'AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 '
chrome_options.add_argument('user-agent=%s' % user_agent)

执行效果


2.13 设置浏览器代理

chrome_options.add_argument('--proxy-server=你的代理ip地址')

2.14 使用配置

下面的代码会【最大化窗口】且【不加载图片】的启动一个浏览器:

from selenium import webdriverchrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--start-maximized')
chrome_options.add_argument('blink-settings=imagesEnabled=false')
browser = webdriver.Chrome(options=chrome_options)

3. Webdriver常用操作

3.1 获取浏览器名称

browser.name

3.2 最大化浏览器窗口

browser.maximize_window()

3.3 最小化浏览器窗口(Selenium4支持)

browser.minimize_window()

3.4 全屏窗口

类似浏览器中按下【F11】

browser.fullscreen_window()

3.5 访问指定网址

browser.get("https://www.baidu.com") #访问百度

3.6 获取当前页url

browser.current_url

3.7 获取当前页的title

browser.title

3.8 获取当前页窗口句柄

browser.current_window_handle

3.9 截屏当前窗口

browser.save_screenshot('test.png')  #截取当前窗口并命名为`test.png`保存

3.10 刷新

browser.refresh()

3.11 前进(浏览器的【前进】按钮)

browser.forward()

3.12 后退(浏览器的【后退】按钮)

browser.back()

3.13 设置浏览器大小

设置浏览器宽为480,高为800

browser.set_window_size(480, 800)

3.14 设置浏览器位置

设置浏览器宽为480,高为800

browser.set_window_position(480, 800)

3.15 获取浏览器大小

设置浏览器宽为480,高为800

browser.get_window_size(480, 800)

3.16 获取浏览器位置

设置浏览器宽为480,高为800

browser.get_window_position(480, 800)

3.17 执行js脚本

如果需要进行页面滑动(模拟鼠标滚轮操作)可以通过执行js脚本实现
例如滑动到'//*[@id="asideHotArticle"]/h3'元素:

target = browser.find_element(By.XPATH, '//*[@id="asideHotArticle"]/h3')
browser.execute_script("arguments[0].scrollIntoView();", target)

3.18 切换窗口

有多个窗口时,可以通过下面的方法进行切换才能够顺利的进行定位

browser.switch_to.window(browser.window_handles[1])

3.19 切换iframe

页面中的iframe弹窗,需要使用下面的代码切换才能够顺利的进行定位

iframe = browser.find_element(By.CSS_SELECTOR, "#modal > iframe")
# 切换到iframe
browser.switch_to.frame(iframe)

如果iframe有明确的id则可以直接这样写

driver.switch_to.frame('appIframe-product')

3.20 离开iframe

离开iframe,回到默认页面

browser.switch_to.default_content()

3.21 关闭当前窗口

有多个页面的时候,只会关闭当前所在页面

browser.close()

3.22 退出浏览器

会直接关闭浏览器,所有页面都将关闭

browser.quit()

四、总结

实际上webdriver的操作还有很多,比如远程控制项的配置,cookie相关配置等,但都不常用,掌握这些些已经足够了!

下一篇文章会对selenium的键盘鼠标事件进行详解,欢迎订阅本专栏!


曲鸟全栈UI自动化教学(四):Selenium工作原理及Webdriver对浏览器的配置和操作相关推荐

  1. 曲鸟全栈UI自动化教学(三):Selenium页面操作原理及如何高效的进行元素定位

    一.前言 上篇文章中我们成功编写并启动了第一个selenium脚本.那Selenium是怎样知道我们想要操作哪个元素的呢? 这篇文章将为你讲解Selenium的页面操作原理和高效的元素定位方法. 文章 ...

  2. 曲鸟全栈UI自动化教学(五):Selenium的键盘鼠标事件详解

    一.前言 在之前的教学中对于页面的操作只涉及到了两个:点击.输入:其实Selenium的键盘鼠标操作还有很多,现在就为你一一讲解. [Python测试交流群:8140 78962] 文章目录 一.前言 ...

  3. python全栈工程师薪水_python全栈+爬虫+自动化+AI=python全能工程师-挑战年薪30W+

    如果你想选择一种语言来入门编程,那么Python绝对是首选! Python非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解.编程简单直接,更适合初学编程者,让其专注于编程逻辑,而不是困 ...

  4. 如何成为全栈UI设计师 目前UI学习就业怎么样

    UI设计师职业可以说现在是一门较吃香的行业了,不仅薪资高,发展的前景也很好,这样的就业趋势吸引了更多的年轻人的向往和学习.如何成为全栈UI设计师,UI学习就业怎么样呢?下面来看看吧. 如今随着互联网市 ...

  5. 如何成为全栈UI设计师 学习UI前景怎么样

    UI设计师职业可以说现在是一门较吃香的行业了,不仅薪资高,发展的前景也很好,这样的就业趋势吸引了更多的年轻人的向往和学习.如何成为全栈UI设计师,郑州UI学习就业怎么样呢?下面来看看吧. 如今随着互联 ...

  6. Web UI自动化录制工具-Selenium IDE

    Web UI自动化录制工具-Selenium IDE 简介 安装 使用 实例 关于Run for pytest... 简介 Selenium IDE可以对网页行为进行录制.回放自动执行测试步骤,最新版 ...

  7. Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理

    文章目录 一.前言 一.Git基本理论(核心) 1.1工作区 1.2工作流程 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『Gi ...

  8. 最全面的UI自动化面试题全在这里了!你还在考虑什么?

    1.你是如何搭建ui自动化框架的? 在搭建ui自动化框架,使用的是po设计模式,也就是把每一个页面所需要 操作的元素和步骤都封装成一个页面类中.然后使用selenium+unittest搭建 四层框架 ...

  9. Android手机QQ的UI自动化实践,死磕原理

    我们的痛点是,需要快速铺量,那按照用例场景,所见即所得的代码方式,的确是很快,但是我们需要对该模式规范化.结合测试用例的3A原则(Arrange.Act.Assert),我们创造了一种新的封装模式QT ...

最新文章

  1. 仅通过SQL备份文件将MOSS服务器场及所有网站数据迁移到新的一台服务器上
  2. 响应式微服务 in java 译 十五 Microservices in OpenShift
  3. macOS下安装ipython
  4. 赚小钱,靠学一门技术没问题,那想赚大钱该怎么做呢?
  5. (六)关于beetlsql版本(分支)的说明
  6. springboot中Word转PDF技巧
  7. eplan2.5安装教程
  8. Windows中使用命令创建计划任务(at、schtasks)
  9. 【数据压缩】使用Audacity软件分析浊音、清音爆破音的时域及频域特性。
  10. 英特尔cpu与主板芯片组对应关系(包含12代)
  11. mysql error1205 博客_mysql主从复制Error1205
  12. python爬取58同城租房信息_分页爬取58同城租房信息.py
  13. 儿童定位手表app定制开发有哪些功能
  14. 【Pandas分组聚合】 groupby()、agg() 方法的使用
  15. layui 卡片式列表_CardView實現卡片式列表展示
  16. kvs(Kyoto Visualization System)的初次使用
  17. Discuz论坛自动发帖机
  18. 2023年南京农业大学农业信息学考研上岸前辈备考经验指导
  19. 【ASM】史上最通俗易懂的ASM教程 ASM 插件
  20. TCL学习--语法置换(第一篇)

热门文章

  1. 群晖服务器删除的文件都在回收站吗,电脑快速清空回收站之后,文件要如何恢复?...
  2. 一元二次方程求根(含根情况的判断)
  3. 【PHP基础】Cookie基础知识、应用案例代码及攻防
  4. 柏拉图,克尔凯郭尔,席勒,诗歌美学
  5. 《深度强化学习》面试题汇总
  6. Hadoop技术内幕:深入解析MapReduce架构设计与实现原理 (大数据技术丛书) - 电子书下载(高清版PDF格式+EPUB格式)...
  7. 从入门到精通,Java学习路线导航
  8. 创业思维 - LeanCloud的故事
  9. 商业智能平台BI 商业智能分析平台 如何选择合适的商业智能平台BI
  10. react错误:Uncaught Error: Too many re-renders. React limits the number of renders to prevent an infini