Selenium在Pyhton应用

目录

[1. selenium的基本原理](#1. selenium的基本原理)

[2. selenium环境的搭建步骤](#2. selenium环境的搭建步骤)

[3. 元素的定位和操作](#3. 元素的定位和操作)

4.元素的基本属性方法

5.浏览器的操作方法

6.三种等待

强制等待

显示等待

隐式等待

[7. 键盘与鼠标的操作](#7. 键盘与鼠标的操作)

鼠标悬停用

拖拽操作

[8. 下拉框元素定位](#8. 下拉框元素定位)

9.页面滚动操作

[10. 页面截图操作](#10. 页面截图操作)


Selenium是一个用于Web应用程序测试的工具,它提供了一套完整的工具来编写自动化Web应用程序的测试。Selenium测试脚本,并且可以模拟用户与浏览器的交互

1. selenium的基本原理

  1. WebDriver

    • WebDriver是Selenium的核心组件,它是一个接口,用于编写客户端程序来控制浏览器。

    • WebDriver可以启动浏览器实例,发送命令给浏览器,接收浏览器的响应。

    • WebDriver支持多种浏览器,包括Chrome、Firefox、Internet Explorer、Safari等。

  2. 定位元素

    • 通过各种策略(如id、name、class name、css selector、xpath等)定位页面上的元素。

    • 可以对定位单个元素或元素集合进行操作。

  3. 操作

    • 可以模拟用户操作,如点击、输入文本、拖拽等。

    • 可以获取和设置元素的属性和值。

  4. 等待

    • 隐式等待(Implicit Wait):WebDriver会在执行命令时自动等待元素可操作。

    • 显式等待(Explicit Wait):通过编写代码显式等待特定条件成立。

  5. 测试脚本

    • 用支持数据驱动测试,从外部文件或数据库读取测试数据。

    • 支持并发执行测试,可以同时运行多个测试脚本。

  6. 结果验证

    • 可以验证页面元素的状态,检查是否符合预期。

    • 支持断言(Assertions),验证测试结果是否符合预期。

2. selenium环境的搭建步骤

环境安装 pip install selenium

浏览器选择:支持多种浏览器

匹配规则:驱动版本与浏览器版本前三位必须一致,版本不匹配将导致代码无法运行

各版本驱动下载: chromedriver浏览器驱动各版本下载(...113、114、115、116、117、118、119、120、121、122、123、124、125、126、127、128、129、130、131、132、133、134、135、136、137、138、139、140)(原创) - Z哎呀 - 博客园

将下载驱动导入代码包中

复制代码
import time

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

#页面最大化
driver.maximize_window()

time.sleep(3)
#关闭驱动对象
driver.quit()

3. 元素的定位和操作

  • ID定位:通过元素的id属性(最常用)

  • name定位:通过元素的name属性

  • class定位:通过元素的class属性(注意class可能有多个值)

  • 标签定位:通过标签名(不推荐,难以保证唯一性)

  • link_text:精准匹配超链接文本

  • partial_link_text:模糊匹配超链接文本

  • CSS选择器:通过CSS表达式定位

  • XPath:通过XML路径表达式定位

    import time

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

    driver = webdriver.Chrome()

    driver.get("https://www.baidu.com/")

    #页面最大化
    driver.maximize_window()

    #driver.find_element(By.ID,"kw").send_keys("李")

    #定位标签超链接的方式
    #driver.find_element(By.LINK_TEXT,"新闻").click()
    #模糊定位
    #driver.find_element(By.PARTIAL_LINK_TEXT,"新").click()

    #Xpath定位
    driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")

    time.sleep(3)
    #关闭驱动对象
    driver.quit()

4.元素的基本属性方法

5.浏览器的操作方法

复制代码
#设置浏览器的分辨率(宽高)
driver.set_window_size(600,600)
#设置浏览器的相对位置
driver.set_window_position(100,600)
#浏览器的刷新
driver.refresh()
#浏览器的前进
driver.forward()
#浏览器的回退
driver.back()
#关闭浏览器的整个页面
driver.quit()
#关闭浏览器的当前页面
driver.close()
#页面标题
print(driver.title)
#页面当前网址
print(driver.current_url)

6.三种等待

强制等待

显示等待

导入模块

  1. 导入 WebDriverWait 类

    • WebDriverWait 类用于显式等待(Explicit Wait),它允许你指定一个条件,当该条件满足时继续执行脚本。这有助于处理页面加载或元素出现时的延迟问题。
  2. 导入 expected_conditions 模块

    • expected_conditions 模块包含一组预定义的条件,这些条件用于与 WebDriverWait 一起使用。这些条件定义了各种等待条件,如元素是否可见、是否可点击等。

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

在设定时间内,不间断的时间点去定位元素

一旦元素被加载出来,就会被定位到元素,然后执行操作

如果在有效时间内没有定位到元素,那么程序会报错: 超时错误TimeoutException

复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

#页面最大化
driver.maximize_window()

#Xpath定位
driver.find_element(By.XPATH,'//*[@id="kw"]').send_keys("cxk")
driver.find_element(By.XPATH,'//*[@id="su"]').click()

el1 = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="s_tab_inner"]/a[2]/span')))
el1.click()

time.sleep(3)
#关闭驱动对象
driver.quit()

隐式等待

复制代码
driver.implicitly_wait(3)
driver.find_element(By.XPATH,'//*[@id="s_tab_inner"]/a[2]/span')

元素第一次被定位的时候如果能够定位到,那么不会触发隐式等待,如果定位不到才会触发隐式等待的有效时间

可是设置隐式等待的有效时长,如果在有效时长里定位元素,那么不会报错,反之会报错提示,没有找到钙元素的异常: NoSuchElementException

7. 键盘与鼠标的操作

需要从webdriver包中导入Keys类

from selenium.webdriver.common.keys import Keys

复制代码
输入"美女"文本:element1.send_keys("美女")
全选内容:element1.send_keys(Keys.CONTROL + 'a')
复制内容:element1.send_keys(Keys.CONTROL + 'c')
删除内容:element1.send_keys(Keys.BACKSPACE)
输入"帅哥"文本:element1.send_keys("帅哥")
再次全选:element1.send_keys(Keys.CONTROL + 'a')
粘贴内容:element1.send_keys(Keys.CONTROL + 'v')
清空内容:element1.clear()

常用鼠标操作方法

从selenium.webdriver导入ActionChains类,该类提供多种鼠标操作方法

  • 右击操作:使用context_click()方法,传入目标元素参数
  • 双击操作:使用double_click()方法,传入目标元素参

鼠标悬停用

复制代码
element = driver.find_element_by_id("element_id")  # 定位元素
ActionChains(driver).move_to_element(element).perform()  # 鼠标悬用到元素上

拖拽操作

从selenium.webdriver导入ActionChains类,该类提供多种鼠标操作方法

复制代码
source = driver.find_element_by_id("source_id")  # 源元素
target = driver.find_element_by_id("target_id")  # 目标元素
ActionChains(driver).drag_and_drop(source, target).perform()  # 从源元素拖拽到目标元素

8. 下拉框元素定位

  • 首先需要创建Select类对象
  • 通过webdriver.support.select导入Select类
  • 传递要定位的下拉框元素对象(可通过xpath获取)
  • 索引定位:select_by_index(),下标从0开始
  • 文本定位:select_by_visible_text(),通过选项显示文本
  • 值定位:select_by_value(),通过选项的value属性值

9.页面滚动操作

通过JavaScript脚本执行滚动操作

  • 第一个参数控制左右滚动
  • 第二个参数控制上下滚动
  • 执行方法:driver.execute_script(js脚本)

10. 页面截图操作

方法:driver.get_screenshot_as_file()

仅支持PNG格式

11. 警告框

获取警告框元素

通过find_element和XPath定位警告框触发元素,对定位到的元素执行click()操作

  • 使用switch_to.alert切入警告框
  • 获取文本:通过alert对象的text属性获取提示信息
关闭警告框的方法

使用accept()方法模拟点击确定按钮

使用dismiss()方法模拟点击取消按钮

即使警告框界面上没有显示取消按钮,调用dismiss()方法仍可取消

输入型警告框处理

对于需要输入内容的警告框,使用send_keys()方法

12. 页面切换

相关推荐
@Aurora.30 分钟前
【性能测试】---测试工具篇(jmeter)
测试工具·jmeter·压力测试
day>day>up2 小时前
django uwsgi启动报错failed to get the Python codec of the filesystem encoding
后端·python·django
Shun_Tianyou3 小时前
Python Day25 进程与网络编程
开发语言·网络·数据结构·python·算法
都叫我大帅哥4 小时前
LangGraph条件判断:让AI工作流"聪明"起来
python·langchain
编程研究坊4 小时前
Neo4j APOC插件安装教程
数据库·人工智能·python·neo4j
咩?5 小时前
SEABORN库函数(第十八节课内容总结)
开发语言·python·matplotlib·seaborn
万粉变现经纪人5 小时前
如何解决pip安装报错ModuleNotFoundError: No module named ‘transformers’问题
人工智能·python·beautifulsoup·pandas·scikit-learn·pip·ipython
浊酒南街5 小时前
Pytorch基础入门1
pytorch·python
仪器科学与传感技术博士6 小时前
Matplotlib库:Python数据可视化的基石,发现它的美
开发语言·人工智能·python·算法·信息可视化·matplotlib·图表可视化