软件测试 —— Selenium常用函数

软件测试 ------ Selenium常用函数

  • 操作测试对象
    • [点击/提交对象 click()](#点击/提交对象 click())
    • [模拟按键输入 send_keys("")](#模拟按键输入 send_keys(""))
    • [清除文本内容 clear()](#清除文本内容 clear())
  • [模拟用户键盘行为 Keys包](#模拟用户键盘行为 Keys包)
  • [获取文本信息 text](#获取文本信息 text)
  • [获取当前页面标题 title](#获取当前页面标题 title)
  • [获取当前页面的 url current_url](#获取当前页面的 url current_url)

操作测试对象

点击/提交对象 click()

python 复制代码
# 找到b站搜索键并点击
driver.find_element(By.CSS_SELECTOR,".nav-search-btn > svg:nth-child(1)").click()

模拟按键输入 send_keys("")

python 复制代码
# 找到搜索框,输入小潮院长
driver.find_element(By.CSS_SELECTOR,".nav-search-input").send_keys("小潮院长")

清除文本内容 clear()

输入文本后又想换⼀个新的关键词,这里就需要用到 clear()

python 复制代码
# 找到搜索框,先输入小潮院长,再输入老番茄
driver.find_element(By.CSS_SELECTOR,".nav-search-input").send_keys("小潮院长")
time.sleep(3)
driver.find_element(By.CSS_SELECTOR,".nav-search-input").clear()
time.sleep(3)
driver.find_element(By.CSS_SELECTOR,".nav-search-input").send_keys("老番茄")

但是预期结果不是我们想象的那样:

我们发现,原来的文字并没有被清除,可能是页面上的 JavaScript 可能会阻止 clear() 的工作。我们换成百度的搜索框试试:

python 复制代码
import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.firefox import GeckoDriverManager

# 创建驱动对象
FirefoxIns = GeckoDriverManager().install()
driver = webdriver.Firefox(service=Service(FirefoxIns))

# 发送url
#driver.get("https://www.bilibili.com/")
driver.get("https://www.baidu.com/")

# 找到搜索框,先输入小潮院长,再输入老番茄
# 找到搜索框,先输入小潮院长
# driver.find_element(By.CSS_SELECTOR, ".nav-search-input").send_keys("小潮院长")
# time.sleep(3)
#
# search_box = driver.find_element(By.CSS_SELECTOR, ".nav-search-input")
# text_length = len(search_box.get_attribute('value'))  # 获取当前文本长度
# if text_length > 0:
#     # 发送退格键以逐个删除字符
#     for _ in range(text_length):
#         search_box.send_keys(Keys.BACKSPACE)
# time.sleep(3)
#
# # 再输入老番茄
# search_box.send_keys("老番茄")
# time.sleep(3)

# driver.find_element(By.CSS_SELECTOR,".nav-search-input").send_keys("小潮院长")
# time.sleep(3)
# driver.find_element(By.CSS_SELECTOR,".nav-search-input").clear()
# time.sleep(3)
# driver.find_element(By.CSS_SELECTOR,".nav-search-input").send_keys("老番茄")
#
#
# # 点击搜索键
# driver.find_element(By.CSS_SELECTOR,".nav-search-btn > svg:nth-child(1)").click()
# #driver.find_element(By.XPATH,"/html//body/div[2]/div[2]/div[1]/div[1]/div/div/form/div[2]/svg").click()
# time.sleep(3)


driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("小潮院长")
time.sleep(3)
driver.find_element(By.CSS_SELECTOR,"#kw").clear()
time.sleep(3)
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("老番茄")


# 点击搜索键
driver.find_element(By.CSS_SELECTOR,"#su").click()
#driver.find_element(By.XPATH,"/html//body/div[2]/div[2]/div[1]/div[1]/div/div/form/div[2]/svg").click()
time.sleep(3)
# 关闭浏览器
driver.quit()


我们看到百度的搜索框是允许清除的。

模拟用户键盘行为 Keys包

from selenium.webdriver.common.keys import Keys 这一行代码是从 Selenium 的 webdriver.common.keys 模块中导入了 Keys 类。Keys 类提供了对各种键盘按键的常量定义,允许你在使用 Selenium 编写的自动化测试脚本中模拟用户输入键盘按键的行为。

通过 Keys 类,你可以发送特殊键(如回车键、退格键、箭头键、功能键等)到网页元素,例如文本框或表单。这对于需要模拟用户交互的场景非常有用,比如填写表单、导航页面或者触发快捷键组合。

以下是一些常见的 Keys 常量及其用途:

  • Keys.RETURNKeys.ENTER:模拟按下回车键。
  • Keys.BACKSPACE:模拟按下退格键。
  • Keys.DELETE:模拟按下删除键。
  • Keys.TAB:模拟按下 Tab 键,用于在表单字段之间移动焦点。
  • Keys.ESCAPE:模拟按下 Esc 键。
  • Keys.SPACE:模拟按下空格键。
  • Keys.ARROW_DOWN, Keys.ARROW_UP, Keys.ARROW_LEFT, Keys.ARROW_RIGHT:模拟按下方向键。
  • Keys.CONTROL , Keys.ALT, Keys.SHIFT**:模拟按下控制键、Alt 键和 Shift 键。通常与其它按键组合使用。
  • Keys.COMMAND:主要用于 Mac 系统上的命令键。

示例用法

下面是一些如何使用 Keys 的例子:

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# 初始化 WebDriver (假设已经设置了正确的驱动程序路径)
driver = webdriver.Chrome()

# 打开一个网页
driver.get("https://www.example.com")

# 找到搜索框并输入查询
search_box = driver.find_element(By.CSS_SELECTOR, ".nav-search-input")
search_box.send_keys("Selenium")

# 使用 Keys.SPACE 发送空格键
search_box.send_keys(Keys.SPACE)

# 使用 Keys.BACKSPACE 删除最后一个字符
search_box.send_keys(Keys.BACKSPACE)

# 使用 Keys.CONTROL + 'a' 来全选文本 (适用于 Windows/Linux),或 Keys.COMMAND + 'a' (适用于 macOS)
search_box.send_keys(Keys.CONTROL, 'a')  # 对于 macOS 使用 Keys.COMMAND 而不是 Keys.CONTROL

# 使用 Keys.DELETE 清除选定的文本
search_box.send_keys(Keys.DELETE)

# 输入新的查询词
search_box.send_keys("Appium")

# 使用 Keys.RETURN 模拟按下回车键来提交表单
search_box.send_keys(Keys.RETURN)

# 关闭浏览器
driver.quit()

通过这种方式,你可以在自动化测试中更逼真地模拟用户的键盘操作,从而更好地测试你的应用程序。

python 复制代码
import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.firefox import GeckoDriverManager

# 创建驱动对象
FirefoxIns = GeckoDriverManager().install()
driver = webdriver.Firefox(service=Service(FirefoxIns))

# 发送url
driver.get("https://www.bilibili.com/")
#driver.get("https://www.baidu.com/")

# 找到搜索框,先输入小潮院长,再输入老番茄
# 找到搜索框,先输入小潮院长
driver.find_element(By.CSS_SELECTOR, ".nav-search-input").send_keys("小潮院长")
time.sleep(3)

search_box = driver.find_element(By.CSS_SELECTOR, ".nav-search-input")
click_box = driver.find_element(By.CSS_SELECTOR, ".nav-search-btn > svg:nth-child(1)")
text_len = len(search_box.get_attribute("value"))
if text_len > 0:
    for _ in range(text_len):
        search_box.send_keys(Keys.BACKSPACE)
time.sleep(3)

# 再输入老番茄
search_box.send_keys("老番茄")
time.sleep(3)

click_box.click()
time.sleep(3)

driver.quit()

我们可以模拟退格来达到清除的效果

获取文本信息 text

如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印⼀下:

我们可以拿b站的"投稿"来试验,是否可以拿到:

python 复制代码
print(driver.find_element(By.CSS_SELECTOR,".header-upload-entry__text").text)

但是我们可以换一下,百度搜索的页面,看我们是否可以把"百度一下"这几个字拿出来:

python 复制代码
import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.firefox import GeckoDriverManager

# 创建驱动对象
FirefoxIns = GeckoDriverManager().install()
driver = webdriver.Firefox(service=Service(FirefoxIns))

# 发送url
#driver.get("https://www.bilibili.com/")
driver.get("https://www.baidu.com/")

print(driver.find_element(By.CSS_SELECTOR,"#su").text)

我们发现好像并没有我们想要的结果。

我们可以看一下网页的源代码,这里"百度一下"是作为属性 存在的。
而我们看看,b站投稿按钮"投稿"两个字是作为内容存在的:

所以当文字是作为属性存在的,我们用text就显示不出来,这个时候,我们要用另外一种方法:get_attribute("属性名称")

get_attribute("属性名称")

这样我们就能获取到文字了。

获取当前页面标题 title

python 复制代码
import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.firefox import GeckoDriverManager

# 创建驱动对象
FirefoxIns = GeckoDriverManager().install()
driver = webdriver.Firefox(service=Service(FirefoxIns))

# 发送url
driver.get("https://www.bilibili.com/")
#driver.get("https://www.baidu.com/")

print(driver.title)

获取当前页面的 url current_url

python 复制代码
import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from webdriver_manager.firefox import GeckoDriverManager

# 创建驱动对象
FirefoxIns = GeckoDriverManager().install()
driver = webdriver.Firefox(service=Service(FirefoxIns))

# 发送url
driver.get("https://www.bilibili.com/")
#driver.get("https://www.baidu.com/")

print(driver.current_url)
相关推荐
niuniu_6662 小时前
安全性测试(Security Testing)
测试工具·单元测试·appium·测试·安全性测试
m0_490240673 小时前
软件自动化测试(1):python+selenium自动化测试环境搭建
开发语言·python·selenium
薄荷你玩_7 小时前
简单粗暴,用浏览器调试端口绕过Selenium/Playwright/Puppeteer检测
selenium·测试工具
程序员三藏7 小时前
Python+Jenkins+Allure Report接口自动化测试持续集成
自动化测试·软件测试·python·测试工具·ci/cd·jenkins·测试用例
星星点灯5088 小时前
盛铂科技FlexDDS-NG:12通道相位连续DDS信号发生器,400MHz高频输出赋能量子光学与超冷原子研究
驱动开发·科技·测试工具·量子计算·模块测试·射频工程
niuniu_66610 小时前
selenium应用测试场景
python·selenium·测试工具·单元测试·测试
天才测试猿20 小时前
Selenium常用函数总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
一个幽默的程序员1 天前
Postman 如何批量发送 API 请求?循环发送功能
测试工具·postman
niuniu_6661 天前
appium应用测试场景
功能测试·selenium·测试工具·appium·测试
程序员小远1 天前
Python+requests实现接口自动化测试框架
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·接口测试