软件测试 —— 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)
相关推荐
md_10084 小时前
实战指南:使用Wireshark捕获并解密HTTPS数据包
测试工具·https·wireshark
天堂的恶魔9464 小时前
软件测试 —— Selenium(等待)
selenium·测试工具
??? Meggie4 小时前
【Python】Selenium根据网页页面长度,模拟向下滚动鼠标,直到网页底部的操作
python·selenium·计算机外设
程序员杰哥5 小时前
Web自动化测试平台设计与落地
python·功能测试·selenium·测试工具·职场和发展·单元测试·测试用例
测试杂货铺6 小时前
单元测试与unittest框架
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
Hacker_Nightrain6 小时前
内网渗透测试工具及渗透测试安全审计方法总结
网络·测试工具·安全
立昂7 小时前
解决postman打开一直转圈圈的问题
测试工具·postman
测试秃头怪7 小时前
银行测试:第三方支付平台业务流,功能/性能/安全测试方法
自动化测试·软件测试·python·功能测试·测试工具·测试用例·安全性测试
测试199820 小时前
接口测试之postman的使用
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman