Selenium在Pyhton应用

目录

1. selenium的基本原理

2. selenium环境的搭建步骤

3. 元素的定位和操作

4.元素的基本属性方法

5.浏览器的操作方法

6.三种等待

强制等待

显示等待

隐式等待

7. 键盘与鼠标的操作

 鼠标悬停用

拖拽操作

8. 下拉框元素定位

9.页面滚动操作

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. 页面切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值