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

简介: 大家好,我是温大大最近又开始“卷” UI 自动化框架,其实也是响应读者们的需求(如果你也正在找工作 / 面试 / 学习,欢迎加入我们)教你如何使用 selenium4.1.2 + python3.9 打开1个chrome 浏览器并请求1个url地址。整个过程其实很简单,安装环境 + 写4行代码。里面难点其实就是环境的搭建:- 首先 安装python3.9环境,- 接着 安装python编辑工具pycha

大家好,我是温大大

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

网络异常,图片无法展示
|

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

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

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

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

网络异常,图片无法展示
|

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

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

网络异常,图片无法展示
|

目录

  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 下载:

Windows 下载:

1.2 Pycharm 安装

1、安装

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

网络异常,图片无法展示
|

Mac 下载:

Windows 下载:

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.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.9/bin:${PATH}"
export PATH
alias 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

网络异常,图片无法展示
|

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.zip
admin % sudo cp chromedriver /usr/local/bin


Windows 为例:

网络异常,图片无法展示
|

  • python获取自己的exe路径
  • 新建脚本test.py

import sys
print(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 webdriver
from selenium.webdriver import Keys
from 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 webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from 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) # seconds
driver.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()

  • 查看窗口名

"somewhere.html" target="windowName">Click here to open a new window


  • 不同的窗口和框架之间移动

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接口,

3.4 页面对象设计方法

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

1、测试用例类

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

import unittest
from selenium import webdriver
import 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 BasePageElement
from 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



关注我,加我好友拉你进面试群,一起讨论面试干货 / 套路

点击链接:温大大


让我帮你规划下学习线路 & 职业规划线路,帮你升职加薪。

关注公众号:测试猿温大大

相关文章
|
4月前
|
前端开发 测试技术 Python
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
本文分享了使用Selenium进行UI自动化测试的全过程,包括开发环境部署、代码实现、思路分析和难点解析。作者通过一个实际案例,讲述了如何利用Selenium处理前端生成报告失败的问题,以及在UI自动化中定位元素和处理元素不唯一的情况。同时,文章强调了解决问题思路的重要性,鼓励读者开拓思维,寻找不同的解决方案。
159 4
【Selenium全攻略】掌握这一工具,实现自动化测试的所有梦想
|
3天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
58 16
Selenium:强大的 Web 自动化测试工具
|
2月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
111 6
|
6月前
|
数据采集 Java
selenium+java入门demo
selenium+java入门demo
49 4
|
7月前
|
Web App开发 测试技术 API
自动化测试工具Selenium的深度解析
【5月更文挑战第27天】本文旨在深入剖析自动化测试工具Selenium,探讨其架构、原理及应用。通过对其核心组件、运行机制及在实际项目中的应用案例进行详细解读,以期为软件测试人员提供全面、深入的理解与实践指导。
|
6月前
|
数据采集 Web App开发 前端开发
Selenium:自动化Web浏览器操作的强大工具
**Selenium** 是一款用于自动化Web应用测试和模拟用户行为的工具,支持多种浏览器和编程语言。安装包括安装Selenium库和对应浏览器的WebDriver。基本用法包括导入库、启动浏览器、查找与操作页面元素、等待元素加载及关闭浏览器。在实际项目中,Selenium常用于Web测试、爬虫、自动化表单填写等,优点是跨平台、模拟真实用户行为,但性能较低且依赖浏览器。
258 9
|
7月前
|
JSON 数据管理 测试技术
自动化测试工具Selenium Grid的深度应用分析深入理解操作系统的内存管理
【5月更文挑战第28天】随着互联网技术的飞速发展,软件测试工作日益复杂化,传统的手工测试已无法满足快速迭代的需求。自动化测试工具Selenium Grid因其分布式执行特性而受到广泛关注。本文旨在深入剖析Selenium Grid的工作原理、配置方法及其在复杂测试场景中的应用优势,为测试工程师提供高效测试解决方案的参考。
|
7月前
|
敏捷开发 监控 IDE
深入理解自动化测试工具Selenium的工作原理与实践应用
【5月更文挑战第26天】 随着敏捷开发和持续集成理念的普及,自动化测试在软件开发生命周期中扮演了至关重要的角色。Selenium作为最流行的自动化测试工具之一,以其开源、跨平台和支持多种编程语言的特性被广泛使用。本文将详细解析Selenium的核心组件,探讨其工作原理,并通过案例分析展示如何高效地实施Selenium进行Web应用的自动化测试。我们将从测试准备到结果分析的全过程,提供一系列实用的策略和最佳实践,帮助读者构建和维护一个健壮的自动化测试环境。
|
7月前
|
敏捷开发 IDE 测试技术
深入探索自动化测试工具Selenium的高效应用
【5月更文挑战第23天】 在快速演进的数字时代,软件开发周期不断缩短,而质量保证的需求却日益增加。自动化测试作为确保软件质量的关键手段之一,其重要性不言而喻。Selenium作为一种广泛使用的自动化测试工具,因其跨平台、多语言支持和开源等特性,在业界得到了广泛应用。本文将深入分析Selenium的核心功能,探讨其在真实项目中的应用策略,并通过案例分析展示如何通过Selenium提高测试效率和准确性。
|
7月前
|
敏捷开发 监控 测试技术
探索自动化测试工具Selenium Grid的高效集成策略
【4月更文挑战第30天】在现代Web应用的快速迭代和持续部署中,测试自动化已成为确保产品质量的关键。Selenium Grid作为一款支持多种浏览器和操作系统的测试工具,提供了并行执行测试用例的能力,极大地提升了测试效率。本文将深入探讨如何高效地将Selenium Grid集成到现有的测试框架中,以及实施过程中的最佳实践,帮助团队最大化测试覆盖率,同时降低资源消耗。

相关实验场景

更多