IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python+selenium常用定位元素与web自动化测试实例 -> 正文阅读

[Python知识库]python+selenium常用定位元素与web自动化测试实例

一、需求简述

适用于后台系统任务、商品信息、订单等场景的批量操作,本文章设计背景为后台系统需要重复审核任务状态,这里仅作审核通过场景,审核失败场景可扩展补充,实现逻辑大同小异;

页面操作逻辑如下:

  • 登录后台系统
  • 输入用户名、密码、验证码(这里验证码为固定验证码,动态验证码可利用(mysql.connector模块从数据库中获取,可参考之前操作数据库相关的文章)
  • 进入系统子页面,点击至系统的三级页面
  • 输入用户id
  • 筛选任务状态(审核中任务)
  • 点击审核(此处为了方便用了系统自带的【一键审核】功能,多条数据的批量审核可使用循环遍历的方法自行扩展)
  • 审核二级确认框
  • 审核三级确认框
  • 审核完成

二、设计思路

1、单个脚本不做区分,仅覆盖当前一种场景,故仅定义一个函数在主函数中调用

2、主函数中优先使用input方法将用户ID存入变量中,方便后续使用

3、引用模块,如下

????????

from selenium import webdriver
from selenium.webdriver.chrome.service import Service #驱动指向
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException #捕获异常信息
from time import sleep
from selenium .webdriver.support.select import Select  #用于下拉框元素定位

4、指定操作浏览器驱动:chrome

????????

    wd = webdriver.Chrome(service=Service(r'F:\selenium_chrome\chromedriver_win32\chromedriver.exe'))

5、登录后台

????????

    # 后台执行登录操作
    wd.get('http://dexxxxm/data/task/index')
    wd.maximize_window()
    element = wd.find_element(By.NAME, 'info[username]')
    element.send_keys('Thinkel')
    element_pwd = wd.find_element(By.NAME, 'info[password]')
    element_pwd.send_keys('Thinkel')
    elemen_vf = wd.find_element(By.NAME, 'info[verify]')
    elemen_vf.send_keys('1111')
    #尝试定位【登录】按钮,定位失败则回车键登入
    try:
        element_bt = wd.find_element(By.CSS_SELECTOR, 'btn green pull-right')
        element_bt.click()
        print("后台登入成功")
    except NoSuchElementException:
        elemen_vf.send_keys('\n')
        print("后台登入成功")
        sleep(3)

6、筛选需要操作的数据

????????

    wd.get('http://dev1318.xxxx.com/data/task/index')
    sleep(2)
    #输入用户ID
    elemen_userId = wd.find_element(By.ID,'userId')
    elemen_userId.send_keys(userId)
    #定位下拉框选项为【截图审核中】
    sel = wd.find_element(By.ID,'subStatus')
    Select(sel).select_by_value('4')
    sleep(2)
    #尝试定位【搜索】按钮,这里用的绝对路径,容易出bug
    try:
        element_search1 = wd.find_element(By.XPATH,'/html/body/div[3]/div[2]/div[2]/div[2]/div/div/div/div/div[1]/div/form/div[3]/span/button[1]')
        element_search1.click()
        print("【待审核任务】查询成功,即将进行审核操作.....")
    except NoSuchElementException:
        print("没有找到【搜索】按钮,请检查页面布局是否变更")
        wd.quit()
    sleep(2)

7、判断筛选之后是否存在符合条件的待审核数据

????????

#定位页面是否有【审核】样式按钮,判断当前用户是否有可操作的任务数据
    try:
        wd.find_element(By.XPATH,"//*[contains(@class,'fa fa-edit')]")
    except NoSuchElementException:
        print("该用户没有需要审核的任务,请确认后再试")
        wd.quit()
    #【一键审核】选择data-target属性值 包含#myModalAll字符串的页面元素
    examine = wd.find_element(By.XPATH,"//*[contains(@data-target,'#myModalAll')]")
    examine.click()
    sleep(2)
    #点击【变更审核成功】按钮
    change = wd.find_element(By.XPATH,"//*[contains(@onclick,'updateStatusAll()')]")
    change.click()
    sleep(2)
    #二次确认弹窗
    determine = wd.find_element(By.CLASS_NAME,'layui-layer-btn0')
    determine.click()
    sleep(5)

8、主函数调用

????????

if __name__=="__main__":
    userId = int(input("请输入你的用户ID:\n"))
    Sign()
    print("审核已完成")

三、代码实现

????????

from selenium import webdriver
from selenium.webdriver.chrome.service import Service #驱动指向
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException #捕获异常信息
from time import sleep
from selenium .webdriver.support.select import Select  #用于下拉框元素定位

# 后台登入
def Sign():
    # 指定浏览器驱动位置
    wd = webdriver.Chrome(service=Service(r'F:\selenium_chrome\chromedriver_win32\chromedriver.exe'))
    # 后台执行登录操作
    wd.get('http://dev1318.admin.xxxia.com/data/task/index')
    wd.maximize_window()
    element = wd.find_element(By.NAME, 'info[username]')
    element.send_keys('Thinkel')
    element_pwd = wd.find_element(By.NAME, 'info[password]')
    element_pwd.send_keys('Thinkel')
    elemen_vf = wd.find_element(By.NAME, 'info[verify]')
    elemen_vf.send_keys('1111')
    #尝试定位【登录】按钮,定位失败则回车键登入
    try:
        element_bt = wd.find_element(By.CSS_SELECTOR, 'btn green pull-right')
        element_bt.click()
        print("后台登入成功")
    except NoSuchElementException:
        elemen_vf.send_keys('\n')
        print("后台登入成功")
        sleep(3)
    wd.get('http://dev1318.admin.zxxxia.com/data/task/index')
    sleep(2)
    #输入用户ID
    elemen_userId = wd.find_element(By.ID,'userId')
    elemen_userId.send_keys(userId)
    #定位下拉框选项为【截图审核中】
    sel = wd.find_element(By.ID,'subStatus')
    Select(sel).select_by_value('4')
    sleep(2)
    #尝试定位【搜索】按钮,这里用的绝对路径,容易出bug
    try:
        element_search1 = wd.find_element(By.XPATH,'/html/body/div[3]/div[2]/div[2]/div[2]/div/div/div/div/div[1]/div/form/div[3]/span/button[1]')
        element_search1.click()
        print("【待审核任务】查询成功,即将进行审核操作.....")
    except NoSuchElementException:
        print("没有找到【搜索】按钮,请检查页面布局是否变更")
        wd.quit()
    sleep(2)
    #定位页面是否有【审核】样式按钮,判断当前用户是否有可操作的任务数据
    try:
        wd.find_element(By.XPATH,"//*[contains(@class,'fa fa-edit')]")
    except NoSuchElementException:
        print("该用户没有需要审核的任务,请确认后再试")
        wd.quit()
    #【一键审核】选择data-target属性值 包含#myModalAll字符串的页面元素
    examine = wd.find_element(By.XPATH,"//*[contains(@data-target,'#myModalAll')]")
    examine.click()
    sleep(2)
    #点击【变更审核成功】按钮
    change = wd.find_element(By.XPATH,"//*[contains(@onclick,'updateStatusAll()')]")
    change.click()
    sleep(2)
    #二次确认弹窗
    determine = wd.find_element(By.CLASS_NAME,'layui-layer-btn0')
    determine.click()
    sleep(5)

if __name__=="__main__":
    userId = int(input("请输入你的用户ID:\n"))
    Sign()
    print("审核已完成")

四、技术要点

  • id定位:elemen_userId = wd.find_element(By.ID,'userId')
  • name定位:element_pwd = wd.find_element(By.NAME, 'info[password]')
  • CSS_SELECTOR:element_bt = wd.find_element(By.CSS_SELECTOR, 'btn green pull-right')
  • XPATH绝对路径:
  • /html/body/div[3]/div[2]/div[2]/div[2]/div/div/div/div/div[1]/div/form/div[3]/span/button[1]
  • XPATH匹配字符串:
  • //*[contains(@class,'fa fa-edit')]
  • CLASS_NAME

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:08:24  更:2022-03-03 16:12:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 22:39:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码