selenium_web自动化测试_02_元素操作

文章目录


(一)元素操作

1. 为什么要学习操作元素的方法?

① 需要让脚本模拟用户给指定元素输入值

② 需要让脚本模拟人为删除元素的内容

③ 需要让脚本模拟点击操作

2. 元素常用操作方法

click()------单击元素

send_keys(value)------模拟输入

clear()------清除文本

3. 案例

需求:打开注册A.html页面,完成以下操作:

  1. 通过脚本执行输入用户名:admin;密码:123456;电话号码:18611111111;电子邮件:123@qq.com

  2. 间隔 3 秒,修改电话号码为:18622222222

  3. 间隔 3 秒,点击"注册"按钮

  4. 元素定位方法不限

  1. 修改电话号码,先清除在输入新的号码clear()
  2. 点击按钮click()
python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()

url = r"E:\CODE\test_study\web_source\day01\注册A.html"
driver.get(url)

try:
    driver.find_element(By.CSS_SELECTOR, '#userA').send_keys('admin')
    driver.find_element(By.CSS_SELECTOR, '#passwordA').send_keys('123456')
    driver.find_element(By.CSS_SELECTOR, '.telA').send_keys('18611112222')
    driver.find_element(By.CSS_SELECTOR, '#emailA').send_keys('123@qq.com')

    sleep(2)

    driver.find_element(By.CSS_SELECTOR, '.telA').clear()
    driver.find_element(By.CSS_SELECTOR, '.telA').send_keys('18622223333')

    sleep(2)

    driver.find_element(By.CSS_SELECTOR, 'button').click()

    sleep(2)

finally:
    driver.quit()

2秒后:

2秒后:

2秒后关闭


(二)操作浏览器

方法 效果
maximize_window() 最大化浏览器窗口
set_window_size(width,height) 设置浏览器窗口大小(像素)
set_window_position(x,y) 设置浏览器窗口位置
back() 后退
forward() 前进
refresh() 刷新
close() 关闭当前窗口
quit() 关闭浏览器驱动对象
title 获取页面title
current_url 获取当前页面URL

案例1:

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()

url = r"E:\CODE\test_study\web_source\day01\注册A.html"
driver.get(url)

try:
    # 将浏览器最大化
    driver.maximize_window()
    # 暂停2秒
    sleep(2)
    # 设置固定大小 300*200
    driver.set_window_size(300,200)
    # 暂停2秒
    sleep(2)
    # 移动浏览器窗口位置 x:320,y:150
    driver.set_window_position(320,150)
    # 暂停2秒
    sleep(2)
    # 最大化
    driver.maximize_window()
    # 点击访问新浪网站。注意:要演示后退功能,必须先打开新的网站
    driver.find_element(By.PARTIAL_LINK_TEXT, '访问').click()
    # 暂停2秒
    sleep(2)
    # 后退------> 注册A.html
    driver.back()
    # 暂停2秒
    sleep(2)
    # 前进------>新浪
    driver.forward()
    # sleep(2)

finally:
    driver.quit()

案例2:

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()

url = r"E:\CODE\test_study\web_source\day01\注册实例.html"
driver.get(url)

try:
    driver.find_element(By.CSS_SELECTOR,'#user').send_keys('admin')
    sleep(2)

    # 刷新
    driver.refresh()
    # 获取title
    title = driver.title
    print('当前页面的title:',title)
    # 获取当前url
    current_url = driver.current_url
    print('当前页面url:',current_url)
    # 点击 注册A网页 打开新窗口
    driver.find_element(By.PARTIAL_LINK_TEXT,'注册A网页').click()
    # 暂停3秒
    sleep(3)
    # 关闭主窗口
    driver.close()
    # 暂停2秒
    sleep(2)

finally:
    driver.quit()

刷新:

打开注册A网页:

然后再退回去:

打印结果:


(三)获取元素信息

方法 效果
size 返回元素大小
text 获取元素的文本
get_attribute('xxx') 获取属性值,传递的参数为元素的属性名
is_displayed() 判断元素是否可见
is_enabled() 判断元素是否可用
is_selected() 判断元素是否选中,用来检查复选框或单选按钮是否被选中

案例:

需求:使用"注册A.html"页面,完成以下操作:

  1. 获取用户名输入框的大小
  2. 获取页面上第一个超链接的文本内容
  3. 获取页面上第一个超链接的地址
  4. 判断页面中的 span 标签是否可见
  5. 判断页面中取消按钮是否可用
  6. 判断页面中"旅游"对应的复选框是否为选中的状态
python 复制代码
# 相对路径://*[@id="userA"]
# 绝对路径:/html/body/form/div/fieldset/p[1]/input
from gc import enable

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

driver = webdriver.Chrome()

url = r"E:\CODE\test_study\web_source\day01\注册实例.html"
driver.get(url)

try:
    # 获取用户名文本框大小
    size = driver.find_element(By.CSS_SELECTOR,'#user').size
    print('用户名文本框大小:',size)
    # 获取页面上第一个超文本连接内容
    text = driver.find_element(By.CSS_SELECTOR,'a').text
    print('页面上第一个超文本连接内容:',text)
    # 获取页面上第一个超文本连接地址
    address = driver.find_element(By.CSS_SELECTOR, 'a').get_attribute('href')
    print('页面中第一个超文本连接地址:',address)
    # 判断span元素是否可见
    display = driver.find_element(By.CSS_SELECTOR,'span').is_displayed()
    print('span元素是否可见:',display)
    # 判断取消按钮是否可用
    enabled = driver.find_element(By.CSS_SELECTOR,'#cancel').is_enabled()
    print('取消按钮是否可用:',enabled)
    # 判断旅游是否被选中
    selected = driver.find_element(By.CSS_SELECTOR,'#ly').is_selected()
    print('旅游是否被选中:',selected)

    sleep(2)

finally:
    driver.quit()

(四)鼠标和键盘操作

一、鼠标操作

常见的鼠标操作有:点击、右击、双击、悬停、拖拽等。

1.1 为什么要操作鼠标?

现在Web产品中存在丰富的鼠标交互方式,作为一个 Web 自动化测试框架,需要应对这些鼠标操作的应用场景。

1.2 鼠标操作的方法

在 Selenium 中,将操作鼠标的方法封装在 ActionChains 类中。

from selenium.webdriver.common.action_chains import ActionChains

实例化对象:
action = ActionChains(driver)

方法:

方法 效果
context_click(element) 右击
double_click(element) 双击
drag_and_drop(source,target) 拖动
move_to_element(element) 悬停
perform() 执行

案例一:右击,双击,悬停,执行

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep

driver = webdriver.Chrome()

url = r"E:\CODE\test_study\web_source\day01\注册A.html"
driver.get(url)

try:
    # 实例化并获取 ActionChains类
    action = ActionChains(driver)
    # 定位用户名 在用户名上 右击鼠标,预期:粘贴
    username = driver.find_element(By.CSS_SELECTOR,'#userA')
    action.context_click(username).perform()
    sleep(2)
    # 发送用户名 admin,并进行双击。预期:选中 admin
    username.send_keys('admin')
    action.double_click(username).perform()
    sleep(2)
    # 移动到注册按钮上,预期:按钮变色
    button = driver.find_element(By.CSS_SELECTOR,'button')
    action.move_to_element(button).perform()
    sleep(2)

finally:
    driver.quit()


二、键盘操作

  1. 模拟键盘上一些按键或者组合键的输入。如:Ctrl+C,Ctrl+V
  2. Selenium 中把键盘的按键都封装在 Keys 类中

from selenium.webdriver.common.keys import Keys

方法 键盘
send_keys(keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)

案例:

需求:打开注册A页面,完成以下操作:

  1. 输入用户名:admin1,暂停2秒,删除1
  2. 全选用户名:admin,暂停2秒
  3. 复制用户名:admin,暂停2秒
  4. 粘贴到密码框
python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep

driver = webdriver.Chrome()

url = r"E:\CODE\test_study\web_source\day01\注册A.html"
driver.get(url)

try:
    username = driver.find_element(By.CSS_SELECTOR, '#userA')
    username.send_keys('admin1')
    sleep(2)
    username.send_keys(Keys.BACKSPACE)
    sleep(2)
    username.send_keys(Keys.CONTROL,'a')
    sleep(2)
    username.send_keys(Keys.CONTROL,'c')
    sleep(2)
    driver.find_element(By.CSS_SELECTOR, '#passwordA').send_keys(Keys.CONTROL,'v')
    sleep(2)

finally:
    driver.quit()

(五)元素等待

概念:在定位页面元素时如果未找到,会在指定时间内一致等待的过程。

⭐ 为什么要设置元素等待?

① 网络速度慢

② 电脑配置低

③ 服务器处理请求满

一、隐式等待

定位元素时,如果能定位到元素,则直接返回该元素,不触发等待;

如果不能定位到该元素,则间隔一段时间后再去定位元素;

如果在达到最大时长时还没有找到指定元素,则抛出元素不存在的异常NoSuchElementException

方法:driver.implicitly_wait(timeout)

(timeout:为等待最大时长,单位:秒)

说明:隐式等待为全局变量设置(只需要设置一次,就会作用于所有元素)

案例:

打开注册A页面,完成以下操作

使用隐式等待定位用户名输入框,如果元素存在,就输入admin

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Chrome()

# 设置隐式等待10秒
driver.implicitly_wait(10)

url = r"E:\CODE\test_study\web_source\day01\注册A.html"
driver.get(url)

try:
    # 给一个错误的id,不能知道,如果直接抛出异常,说明等待失效。
    # 如果在设置指定时长以外抛出异常,说明等待生效
    driver.find_element(By.CSS_SELECTOR,'#user').send_keys('admin')
    sleep(2)

finally:
    driver.quit()

二、显式等待

定位指定元素时,如果能定位到元素,则直接返回该元素,不触发等待;

如果不能定位到该元素,则间隔一段时间后再去定位元素;

如果在达到最大时长时还没有找到指定元素,则抛出超时异常TimeoutException

在 Selenium 中把显式等待的相关方法封装在 WebDriverWait 类中。

  1. 导入包:from selenium.webdriver.support.wait import WebDriverWait
  2. WebDriverWait(driver,timeout=30,poll_frequency=0.5)
    • driver:浏览器驱动对象
    • timeout:超时的时长,单位:秒
    • poll_frequency:检测间隔时间,默认为0.5秒
  3. 调用方法 untill(method):直到...时
    • method:函数名称,该函数用来实现对元素的定位
    • 一般使用匿名函数来实现:lambda x: x.find_element_by_id('userA')
  4. element = WebDriverWait(driver,10,1).untill(lambda x: x.find_element(By.ID,'userA'))
python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from time import sleep

driver = webdriver.Chrome()

url = r"E:\CODE\test_study\web_source\day01\注册A.html"
driver.get(url)
# 调用until方法返回的一定是一个元素
WebDriverWait(driver,timeout=10,poll_frequency=0.5).until(lambda x: x.find_element(By.ID,'userA')).send_keys('admin')
# 此时 username 还不是元素,只有代码运行起来才是元素
# username.send_keys('admin')

sleep(2)
driver.quit()
相关推荐
newxtc10 小时前
【重庆政务服务网-注册_登录安全分析报告】
人工智能·selenium·测试工具·安全·政务
安冬的码畜日常16 小时前
【JUnit实战3_09】第五章:软件测试的基本原则简介
功能测试·测试工具·junit·单元测试·junit5
安冬的码畜日常1 天前
【JUnit实战3_12】第七章:用 Stub 模拟进行粗粒度测试
测试工具·junit·单元测试·junit5·stub模拟·模拟技术·stub 桩
X1A0RAN2 天前
解决selenium提示chrome版本过低问题
chrome·selenium
程序员小远2 天前
使用Jmeter进行http接口测试
自动化测试·软件测试·python·测试工具·jmeter·http·接口测试
黄名富3 天前
软件测试入门-测试用例
测试工具·测试用例