大家好,我是温大大

最近又开始“卷” UI 自动化框架, 其实也是响应读者们的需求(如果你也正在找工作 / 面试 / 学习,欢迎加入我们)


教你如何使用 selenium4.1.2 + python3.9 打开1个chrome 浏览器并请求1个url地址。

整个过程其实很简单,安装环境 + 写4行代码。 里面难点其实就是环境的搭建:

  • 首先 安装python3.9环境,
  • 接着 安装python编辑工具pycharm,
  • 最后 通过pycharm 安装selenium 的包 + 将浏览器driver放到指定路径,
  • 注意:期间因为pycharm上面的安装源国外的 https://www.python.org 是国外服务器,所以需要设置下国内的安装源再安装selenium,加速我们的安装。

总结:很多时候我们说入门一个工具难,其实不是难在工具本身,而是资源太分散了,没有正确的安装包,也不会正确的配置环境导致你无法入门使用这门工具,最终让你与“高薪”无缘,很难受有没有!


不用怕,同学们现在关注温大大,温大大带各位同学慢慢入门:

  • 自动化测试工具
  • 性能测试工具: jmeter 入门教程
  • app测试工具

再次拜托各位同学~爆肝不易,一键三连:点赞、收藏、转发


目录

  1. 环境准备
  • 1.1 Python3.9 安装(Mac & Windows)
  • 1.2 Pycharm 安装 (Mac & Windows)
  • 1.3 Python3 环境变量配置 (Mac & Windows)
  1. 运行1个demo:访问百度、搜索、断言
  • 2.1 创建 1个项目
  • 2.2 添加 国内repository 设置,加速安装
  • 2.3 安装 Selenium 库
  • 2.4 添加 Chrome driver 驱动
  • 2.5 编写 1个demo请求,打开 浏览器输入URL进行请求
  • 2.6 加强脚本:搜索关键词、点击查询、断言结果
  • 2.7 特殊说明:反爬虫机制
  1. 常用函数指南
  • 3.1 查找元素8大方法

    • 获取: d.find_elements_by_tag_name("option")
    • 提交: d.find_element_by_id("submit").click()
    • 拖放: ActionChains
    • 窗口和框架之间移动: d.switch_to_window("windowName")
    • 弹出对话框: d.driver.switch_to_alert()
    • 访问浏览器历史记录: d.forward()
    • 操作Cookies: d.get_cookies()
  • 3.2 等待页面Waits方法

    • 显式等待: WebDriverWait(driver, 10).until()
    • 隐式等待: d.implicitly_wait(10)
  • 3.3 常用交互操作:

    • 获取: d.find_elements_by_tag_name("option")
    • 提交: d.find_element_by_id("submit").click()
    • 拖放: ActionChains
    • 窗口和框架之间移动: d.switch_to_window("windowName")
    • 弹出对话框: d.driver.switch_to_alert()
    • 访问浏览器历史记录: d.forward()
    • 操作Cookies: d.get_cookies()
  • 3.4 页面对象设计方法

    • 测试用例类
    • 页面对象类
    • 页面元素类
    • 定位器类
  • 3.5 WebDriver API 手册指南

1. 环境准备

1.1 Python3.9 安装

1、安装

官网下载地址:https://www.python.org/downloads/release/python-3910/


Mac 下载:

  • https://www.python.org/ftp/python/3.9.10/python-3.9.10-macos11.pkg

Windows 下载:

  • https://www.python.org/ftp/python/3.9.10/python-3.9.10.exe
  • https://www.python.org/ftp/python/3.9.10/python-3.9.10-amd64.exe

1.2 Pycharm 安装

1、安装

分为 Mac 和 Windows版,这里默认选者Community版本(因为免费)


Mac 下载:

  • https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=mac&code=PCC

Windows 下载:

  • https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC

1.3 Python3 环境变量配置

Mac 为例:

终端运行:which python3,就会看到python的路径

user:~ user$ which python3/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 

打开环境变量文件:

user:~ user$ open  .bash_profile  #打开环境变量文件user:~ user$ touch .bash_profile  #生效更改后的环境变量

把这一段放到环境变量文件中并保存(直接推出就自动保存了哦),

# Setting PATH for Python 3.9# The original version is saved in .bash_profile.pysavePATH="/Library/Frameworks/Python.framework/Versions/3.9/bin:${PATH}"export PATHalias python="/Library/Frameworks/Python.framework/Versions/3.9/bin/python3"

生效环境变量:touch .bash_profile


Windows 为例:

  • 快捷键ctrl + R 输入cmd进入命令行界面

  • 命令行中输入python,可以看到已经进入了python环境。

  • 输入python提示命令未找到,说明环境变量配置失败。

配置环境变量: 方法一:使用命令行配置。

  • 在cmd下输入:path=%path%;后面加上python安装路径。按enter回车即可。

方法二:使用图形界面配置。

  • 1)桌面我的计算机,右键选择属性

  • 2)属性里面选择高级,点下面的环境变量

  • 3)在系统变量值中找到“path”,在系统变量值中输入python的安装路径。(记得先加;分号隔开)

2. 运行1个demo:访问百度并搜索

2.1 创建 1个项目

打开pycharm,并且创建1个项目


2.2 添加 国内repository 设置,加速安装

添加第三方库

  • pycharm - preference - python interpreter - “+”

  • (可选操作,加快包下载)添加国内镜像:manager repository

    • pip 清华源:https://pypi.tuna.tsinghua.edu.cn/simple
    • pip 阿里云源:http://mirrors.aliyun.com/pypi/simple/
    • pip 中科大源: https://pypi.mirrors.ustc.edu.cn/simple/
    • pip 豆瓣源:http://pypi.douban.com/simple/

2.3 安装 Selenium 库

  • 我们搜索selenium,找到 4.1.2版本(这个比较新是 2022-02-24 出来的)

  • 出现 successfully 代表安装成功

  • 同时在python interpreter 下面可以看到selenium 4.1.2 包

注意:selenium4.1.2 对应的python版本需要在 3.7+ 以上

2.4 添加 Chrome driver 驱动

驱动网址:https://registry.npmmirror.com/binary.html?path=chromedriver/


为什么要下载chrome driver(老手忽略),温大大的读者也问过我这个问题。


Mac 为例:

  • 我们以mac 对应的 chrome 对应驱动下载为例,先看mac是什么芯片,再看chrome浏览器版本
  • Chrome 版本查看:更多 - 帮助 - 关于Google Chrome,这里是 99.0.4844.51


  • mac 对应芯片查看:这里是M1

  • 所以选:chrome99.0.4844.51 + _mac64_m1.zip驱动包,并解压

  • 解压 + 拷贝到:usr/local/bin

admin % unzip chromedriver_mac64_m1.zipadmin % sudo cp chromedriver /usr/local/bin

Windows 为例:


  • python获取自己的exe路径
  • 新建脚本test.py
import sysprint(sys.executable)执行输出:E:\virtualenv\django3\Scripts\python.exe这里,就是的python.exe路径了。
  • 将chromedriver.exe文件放到python.exe所在的路径。

  • 比如上文输出的:E:\virtualenv\django3\Scripts\python.exe

2.5 编写 1个demo请求,打开 浏览器输入URL进行请求

1、代码如下

from selenium import webdriver

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

#解释#1、from selenium import webdriver # 加载驱动#2、driver = webdriver.Chrome()    # 打开chrome浏览器#3、driver.get("http://www.baidu.com") # 请求URL

2、run


2.6 加强脚本:搜索关键词、点击查询、断言结果

1、代码如下

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

driver = webdriver.Chrome()driver.get("https://www.baidu.com/")elem = driver.find_element(By.CLASS_NAME, "s_ipt")elem.clear()elem.send_keys("测试猿温大大")elem.send_keys(Keys.RETURN)assert "百度" in driver.page_source

driver.close()

# 解释#1、elem = driver.find_element(By.CLASS_NAME, "s_ipt") # 找到搜索框#2、elem.clear() # 搜索框清空#3、elem.send_keys("测试猿温大大")  # 输入:测试猿温大大#4、elem.send_keys(Keys.RETURN)   # 回车#5、assert "百度" in driver.page_source # 断言:结果内有'百度'#6、driver.close()       # 关闭浏览器

若运行脚本报错:找不到 Keys,说明同学你当前环境中selenium不是4.2.1版本,所以没有Key这个类,要么升级selenium 或者找当前你版本中支持的方法

2.7 特殊说明:反爬虫机制

有时候用百度作为练手网站,它会出现反爬虫机制,所以会出现以下验证码校验情况,这时需要手动输入下,再继续下一步


3 常用函数指南

掌握了搭建环境并运行1个demo,这是UI自动化测试万里长征第一步,后面你还需掌握:

  • 如何查找元素
  • 如何在页面加载不出来的时候Waits
  • 如何在页面填写表格
  • 如何提高自己编程能力,面向页面对象编程,做到代码复用率高、可读性强

同学别怕,温大大陪你一起来"卷"~

3.1 查找元素8大方法

  • find_element_by_id('loginForm'),根据id查找,唯一
  • find_element_by_name('username'),根据name查找,可能重名
  • find_element_by_xpath("/html/body/form[1]"),根据路径查找
  • find_element_by_link_text('Continue'),根据链接文本查找
  • find_element_by_partial_link_text('Conti'),根据链接文本模糊查找
  • find_element_by_tag_name('h1'),根据tag_name查找
  • find_element_by_class_name('content'),根据class_name查找
  • find_element_by_css_selector('p.content'),根据css选择器查找

3.2 等待页面Waits方法

场景:有些页面需要加载完成后,才能去断言,去查找元素,否者用例会失败,这时就需要用到:显式等待 与 隐式等待 方法

  • 显式等待: 是你在代码中定义等待一定条件发生后再进一步执行你的代码。
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()driver.get("http://somedomain/url_that_delays_loading")try:    element = WebDriverWait(driver, 10).until(        EC.presence_of_element_located((By.ID, "myDynamicElement"))    )finally:    driver.quit()
  • 隐式等待: 如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。
from selenium import webdriver

driver = webdriver.Chrome()driver.implicitly_wait(10) # secondsdriver.get("http://somedomain/url_that_delays_loading")myDynamicElement = driver.find_element_by_id("myDynamicElement")

3.3 常用交互操作:下拉、提交、拖放、cookies操作

  • 获取:下拉列表
方法1: 获取后循环  element = driver.find_element_by_xpath("//select[@name='name']")  all_options = element.find_elements_by_tag_name("option")  for option in all_options:    print("Value is: %s" % option.get_attribute("value"))    option.click()
方法2: Select直接选择  from selenium.webdriver.support.ui import Select  select = Select(driver.find_element_by_name('name'))  select.select_by_index(index)  select.select_by_visible_text("text")  select.select_by_value(value)
取消:select = Select(driver.find_element_by_id('id'))select.deselect_all()

  • 提交
driver.find_element_by_id("submit").click()

  • 拖放:
您可以使用拖放,无论是移动一个元素,或放到另一个元素内:  element = driver.find_element_by_name("source")  target = driver.find_element_by_name("target")

  from selenium.webdriver import ActionChains  action_chains = ActionChains(driver)  action_chains.drag_and_drop(element, target).perform()
  • 查看窗口名
<a href="somewhere.html" target="windowName">Click here to open a new window</a>


  • 不同的窗口和框架之间移动
web应用来说,没有任何frames或者只包含一个window窗口是比较罕见的。 WebDriver 支持在不同的窗口之间移动,只需要调用``switch_to_window``方法即可:

driver.switch_to_window("windowName")


  • 弹出对话框
Selenium WebDriver 内置了对处理弹出对话框的支持。 在你的某些动作之后可能会触发弹出对话框,你可以像下面这样访问对话框:

alert = driver.switch_to_alert()


  • 访问浏览器历史记录
driver.get("http://www.example.com")driver.forward()driver.back()


  • 操作Cookies
打开一个页面 driver.get(“http://www.example.com”)

现在设置Cookies,这个cookie在域名根目录下(”/”)生效 cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} driver.add_cookie(cookie)

现在获取所有当前URL下可获得的Cookies driver.get_cookies()
  • 宝典:WebDriver 常用 API接口,

    • 官网地址:https://www.selenium.dev/selenium/docs/api/py/api.html

3.4 页面对象设计方法

页面对象设计方法,便于维护代码、让代码可读性加强、复用性更高

1、测试用例类

下面是一个在python.org网站搜索一个词并保证一些结果可以找到的测试用例

import unittestfrom selenium import webdriverimport page

class PythonOrgSearch(unittest.TestCase):    """A sample test class to show how page object works"""

    def setUp(self):        self.driver = webdriver.Chrome()        self.driver.get("http://www.python.org")

    def test_search_in_python_org(self):        """        Tests python.org search feature.         Searches for the word "pycon" then verified         that some results show up.        Note that it does not look for any particular         text in search results page. This test verifies that        the results were not empty.        """

        #Load the main page. In this case the home         page of Python.org.        main_page = page.MainPage(self.driver)        #Checks if the word "Python" is in title        assert main_page.is_title_matches(),         "python.org title doesn't match."        #Sets the text of search textbox to "pycon"        main_page.search_text_element = "pycon"        main_page.click_go_button()        search_results_page = page.SearchResultsPage(self.driver)        #Verifies that the results page is not empty            assert search_results_page.is_results_found(),             "No results found."

    def tearDown(self):        self.driver.close()

if __name__ == "__main__":    unittest.main()

2、页面对象类

页面对象为每个网页模拟创建出一个对象。 按照此技术,在测试代码和技术实施之间的一个分离层被创建。

这个 page.py 看起来像这样:



from element import BasePageElementfrom locators import MainPageLocators

class SearchTextElement(BasePageElement):    """This class gets the search text     from the specified locator"""

    #The locator for search box where search string is entered    locator = 'q'

class BasePage(object):    """Base class to initialize the base page     that will be called from all pages"""

    def __init__(self, driver):        self.driver = driver

class MainPage(BasePage):    """Home page action methods come here. I.e. Python.org"""

    #Declares a variable that will contain the retrieved text    search_text_element = SearchTextElement()

    def is_title_matches(self):        """Verifies that the hardcoded text "Python"         appears in page title"""        return "Python" in self.driver.title

    def click_go_button(self):        """Triggers the search"""        element = self.driver.find_element(*MainPageLocators.GO_BUTTON)        element.click()

class SearchResultsPage(BasePage):    """Search results page action methods come here"""

    def is_results_found(self):        # Probably should search for this text in the specific page        # element, but as for now it works fine        return "No results found." not in self.driver.page_source

3、页面元素类

这个 element.py 看起来像这样:

from selenium.webdriver.support.ui import WebDriverWait

class BasePageElement(object):    """Base page class that is initialized     on every page object class."""

    def __set__(self, obj, value):        """Sets the text to the value supplied"""        driver = obj.driver        WebDriverWait(driver, 100).until(            lambda driver: driver.find_element_by_name(self.locator))        driver.find_element_by_name(self.locator).send_keys(value)

    def __get__(self, obj, owner):        """Gets the text of the specified object"""        driver = obj.driver        WebDriverWait(driver, 100).until(            lambda driver: driver.find_element_by_name(self.locator))        element = driver.find_element_by_name(self.locator)        return element.get_attribute("value")

4、定位器类 其中一个做法是,从它们正在使用的地方分离定位字符。在这个例子中,同一页面的定位器属于同一个类。

这个 locators.py 看起来像这样:

from selenium.webdriver.common.by import By

class MainPageLocators(object):    """A class for main page locators.     All main page locators should come here"""    GO_BUTTON = (By.ID, 'submit')

class SearchResultsPageLocators(object):    """A class for search results locators.     All search results locators should come here"""    pass

3.5 WebDriver API 手册指南

官方文档:https://www.selenium.dev/selenium/docs/api/py/api.html

关注我,加我好友拉你进面试群,一起讨论面试干货 / 套路,还会有测试工具 / 技能培训 大家一起升职加薪

【工具- selenium】selenium 入门级demo练习,包教包会相关推荐

  1. Python爬虫工具之Selenium

    首先介绍一下Selenium selenium 是一个用于web自动化测试的工具集,selenium不尽支持所有主流的浏览器,而且还支持很多开发语言,更好的是他这种测试工具其实可以融入到不同的测试框架 ...

  2. 自动化测试工具selenium python_自动化测试工具之Selenium(一)-----Selenium的介绍以及安装...

    一.Selenium介绍 Selenium是一个用于Web应用自动化测试的工具.selenium 工具模拟用户行为,最擅长做的事情就是模拟用户点击,输入内容等等.自动化测试模拟用户操作,用户访问一个百 ...

  3. java Excel导入导出工具类 及使用demo

    java Excel导入导出工具类 及使用demo 前言:相信进来的都是想尽快解决问题的,话不多说,按照以下步骤来,可以操作导出excel到本地,导入同理,自行学习.步骤一:直接复制以下excel工具 ...

  4. 自动化测试工具之 selenium

    介绍 selenium-- 中文翻译是 "硒": 这里说的 selenium 是一组自动化测试工具. 官方网址: http://docs.seleniumhq.org/ 这个站点地 ...

  5. python工具类-selenium 浏览器封装

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021-12-08 8:52 # @Author : herry # @File : ...

  6. 测试工具基础------Selenium常用定位方法

    如果想要做自动化测试的话,还是要不断的学习,对于Selenium确实是非常强大,可以使用代码来控制浏览器,做一些类似功能测试的功能 常用的事件有 button.click() #点击 driver.g ...

  7. 爬虫工具之selenium(五)-建立代理IP池

    主要思路是分两步:第一步判断代理IP是否有效,第二步爬取免费网站代理IP,第三步循环判断爬取的代理IP是否有效 一.判断代理IP是否有效 proxies:代理,分为http与https两种,爬取不同网 ...

  8. [Selenium] Selenium定向爬取海量精美图片及搜索引擎杂谈

    我自认为这是自己写过博客中一篇比较优秀的文章,同时也是在深夜凌晨2点满怀着激情和愉悦之心完成的.首先通过这篇文章,你能学到以下几点:         1.可以了解Python简单爬取图片的一些思路和方 ...

  9. 使用轻量级JAVA 爬虫Gecco工具抓取新闻DEMO

    写在前面 最近看到Gecoo爬虫工具,感觉比较简单好用,所有写个DEMO测试一下,抓取网站 http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象 ...

最新文章

  1. 如何得到数据库中所有表字段及字段中文描述
  2. windows平台下vlc编译之一:编译环境构建(2008.12.03更新)
  3. mips j指令_MIPS处理器 MIPS指令集(上)
  4. 七夕秀恩爱新姿势!这波操作我给十分!
  5. 怎么引jsp包_电机引接线的制作流程防护等级
  6. 白左机器人_乔治高中 - George School | FindingSchool
  7. 高等组合学笔记(十三):组合反演,反演公式
  8. 澳大利亚短租市场火爆 “祖母房”成为热搜
  9. 随想录(对比着c学java)
  10. 现在的年轻人不够努力了吗?是什么原因?
  11. 在线制作车牌效果图_厦门车牌识别系统生产厂家直销
  12. 相对开音节java,L314 单音节词读音规则(二)-元音字母发音规则
  13. python shell 方向键不可用
  14. php curl模拟post请求提交数据
  15. Null pointer access: The variable number can only be null at this location。 错误解决
  16. JPopupButton
  17. win10 全屏秒退
  18. php编写六十甲子纳音表_史上最完整的六十甲子纳音表详细说明
  19. php对plc的TCP通信,西门子1200PLC进行TCP通讯配置详解
  20. 【Bug 调试】修复注册验证问题 第十三届蓝桥杯(Web 应用开发)线上模拟赛

热门文章

  1. 当不知轴承型号时如何寻找轴承故障频率_不锈钢轴承温度和振动的检查及降温方法...
  2. python 中匿名函数的使用
  3. 计算机审计师,2012审计师重点掌握:计算机审计
  4. 基于C-V2X的闯红灯预警方法与流程
  5. 成功CIO需要的条件
  6. 函数式编程范式:函数是一等公民
  7. Python环境管理:Andaconda安装使用
  8. Windows扩展屏开发总结
  9. VMware workstation批量创建虚拟机和自动化安装操作系统(一)
  10. Windows 7下可以使用的各个命令语句+C#打开