UI测试自动化-Web-Python-Selenium-2-元素操作、浏览器操作

一、元素操作和元素信息获取

1.元素操作 click send_keys clear

2.获取元素信息:

(1)获取元素大小 元素.size

(2)获取元素文本 元素.text

(3)获取元素属性值 元素.get_attribue(属性名'')

--------------4 5 6 返回值:bool--------------

(4)判断元素是否可见 元素.is_displayed()

(5)判断元素是否可用 元素.is enabled()

(6)判断元素是否选中 元素.is selected()

python 复制代码
from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By
# 1.打开浏览器 --实例化浏览器
driver=webdriver.Chrome()
# 2.输入url
driver.get("http://60.204.225.104")

# 3.1获取用户名输入框的大小
element_size= driver.find_element(By.XPATH,"//input[@placeholder='账号']").size
print(element_size)
# 3.2判断页面中的span标签是否可见
is_seen=driver.find_element(By.CSS_SELECTOR,"span").is_displayed()
print(is_seen)
# 3.3判断第一个按钮是否可点击
is_clickable=driver.find_element(By.CSS_SELECTOR,"button").is_displayed()
print(is_clickable)

# 4.关闭浏览器
sleep(5)
driver.quit()

二、浏览器操作

API:

1.设置浏览器显示范围:

(1)窗口最大化 driver.maxmize_window()

(2)设置窗口大小 driver.set_window_size(width,height)

(3)设置窗口位置 driver.set_window_position(x,y) 坐标 左上角是(0,0)

2.浏览器显示页面操作

(1)页面后退操作 driver.back()

(2)页面前置操作 driver.forword()

(3)页面刷新 driver.refresh()

3.浏览器关闭操作

(1)关闭当前窗口 driver.close()

(2)关闭浏览器 driver.quit()

4.获取浏览器信息

(1)获取标题 driver.title 应用场景:断言时,通过title获取当前所在的页面

(2)获取网页地址 driver.current_url

5.当前窗口:

创建驱动时第一个打开的窗口,对于当前窗口的元素一般可以直接定位和操作,如果弹出新的窗口,对于新的窗口元素不能直接进行操作,需要结合窗口切换

python 复制代码
from selenium import webdriver
from time import sleep

from selenium.webdriver.common.by import By
# 1.打开浏览器 --实例化浏览器
driver=webdriver.Chrome()
# 2.输入url
driver.get("https://www.baidu.com")

# 3.1 最大化浏览器
driver.maximize_window()
sleep(3)
# 3.2 设置窗口宽度500px 高度700px
driver.set_window_size(500,700)
sleep(3)
# 3.3 设置窗口位置
driver.set_window_position(0,500)
sleep(3)
# 3.4 点击超链接
driver.find_element(By.LINK_TEXT,"新闻").click()
sleep(3)
# 3.5返回首页
driver.back()
sleep(3)
# 3.6 前进到新闻界面 --这里会打开新页面
driver.forward()
sleep(3)
# 3.7 刷新新闻界面
driver.refresh()
# 4.关闭浏览器
sleep(5)
driver.quit()

三、页面交互操作

1.下拉框 --Select 推荐还是使用CSS XPATH

(1)元素定位的方式去操作下拉框,操作繁琐,影响脚本运行效率

所以:Selenium--->Select

(2)导包:

from selenium.webdriver.support.select import Select

(3)创建select对象:

select = Select(element)

(4)选择选项:

select .select_by index(index) 根据下标

select .select_by _value(value) 根据选项value属性值

select .select_by_visible text(text) 根据选项文本

(5)Select类实现选项只适用于HTML原生态的<select>+<option>,而基于Element UI 封装的(结构是<div>+<li>)不能使用Select

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome()
driver.get("http://60.204.225.104")
driver.maximize_window()

try:
    # 1. 登录(沿用原逻辑,建议替换为显式等待)
    WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.XPATH, "//input[@placeholder='账号']"))
    ).send_keys("admin")
    time.sleep(1)
    driver.find_element(By.XPATH, "//*[@type='password']").send_keys("123456")
    time.sleep(1)
    driver.find_element(By.XPATH, "//*[@placeholder='验证码']").send_keys("2")
    time.sleep(1)
    driver.find_element(By.XPATH, "//*[contains(text(), '登')]").click()
    time.sleep(2)

    # 2. 定位并点击"客户/供应商/承运商"父菜单(展开子选项)  也可以使用lambda 更灵活,适合复杂条件
    parent_menu = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable(
            # 父节点定位语法,找到当前元素的父级<div>元素  --可点击元素时父级div而非span本身
            (By.XPATH, "//span[text()='客户/供应商/承运商']/parent::div")
        )
    )
    parent_menu.click()
    time.sleep(1)  # 等待子菜单展开

    # 点击"供应商"子菜单
    supplier_submenu=WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH,"//*[text()='供应商']"))
    )
    supplier_submenu.click()
    time.sleep(1)


    # 3. 定位"第一级"选项(第二个)
    second_first_level = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable(
            (By.XPATH, "(//*[contains(text(), '第一级')])[2]")
        )
    )
    second_first_level.click()

finally:
    time.sleep(5)
    driver.quit()

2.弹出框

(1)当页面存在弹出框时,必须先处理掉弹出框才能继续其它操作

(2)类型:

自定义弹出框

JS弹出框

(2)自定义弹出框 ---不用处理,可正常操作

<div>+<button>

可以直接通过web浏览器开发者工具查看到具体的元素信息

通过元素定位后直接可以处理掉

(3)JS弹出框 --必须处理

alert() confirm()

通过IS函数实现,通过web浏览器开发者工具无法查看到元素信息 常见JS弹出框形式:alert(警告框)、confirm(确认框)、prompt(提示框)

不能通过元素定位进行处理

(4)获取弹出框对象

alert=driver.switch_to.alert

alert.text 获取弹出框文本 只合适警告框

(5)弹出框处理方法

alert.accept() 接受弹出框

alert.dismiss() 取消弹出框 确认框没有取消按钮,取消方法一样生效

3.滚动条

(1)所操作的元素不在当前展示页,需要滑动滚动条才能找到(比如用户协议同意)js

(2)定义js字符串 js="window.scrollTo(0,1000)"

(3)执行js字符串 driver.execute_script(js)

相关推荐
AOwhisky1 分钟前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
爱分享的程序猿-Clark5 分钟前
【前端分享】vue开发项目,如何实现 从A页面跳转到B页面,并传值!
前端·javascript·vue.js
其实防守也摸鱼26 分钟前
补天SRC新手入门指南:从0到1的漏洞挖掘之路
网络·python·学习·安全·web安全·数据挖掘·挖洞
lupai29 分钟前
手机在网状态查询 API 新手实战指南
大数据·python·智能手机
徐小夕36 分钟前
花了3天,我写了一款开源AI公众号编辑器
前端·vue.js·github
PBitW1 小时前
git 中容易遗忘的点 (二) ⚡⚡⚡
前端·git·面试
Hilaku1 小时前
2026 年前端大洗牌:React 服务端到 Vite 的底层重构
前端·javascript·程序员
其美杰布-富贵-李1 小时前
Spring Boot 依赖注入说明文档
java·spring boot·python
PBitW1 小时前
git 中容易遗忘的点 (三) 🚀🚀🚀
前端·git·面试
名字还没想好☜1 小时前
React setState 连续调用「丢更新」排查:批量更新与函数式更新
前端·javascript·react.js·react·usestate