selenium4.x 之POM概况

ops/2024/10/21 6:12:08/

Page Object Mpde 

一、基类

 basePage 

import logging
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
logger = logging.getLogger("PO")class BasePage:"""poge的基类"""def __init__(self, driver: webdriver.Chrome):self._driver = driverself._wait = WebDriverWait(driver, 10)   # 自动等待logger.info("PO实例化成功")def __getattr__(self, item):key = f"_loc_{item}"if hasattr(self, key):xpath = getattr(self, key)return self.get_element(xpath)raise AttributeError(f'元素不存在:{item}')def get_element(self, xpath):logger.info("正在进行元素定位")el = self._wait.until(lambda x: self._driver.find_element(By.XPATH, xpath))logger.info("元素定位成功")return el# alert弹窗def alert(self):time.sleep()# alert = driver.switch_to.alertdef _a():return self._driver.switch_to.alert  # 可能会失败,可能会成功alert = self._wait.until(_a)alert.accept()# 系统信息def get_msg(self):time.sleep(0.5)  # 等待-0.5秒el = self._driver.find_element(By.XPATH, "//p[@class='prompt-msg']")return el.text

 Python--getattr反射+selenium详解篇_selenium kwargs.get-CSDN博客

二、页面

page:可以讲属性和方法分开

属性(元素)和方法(元素的操作)

class LoginPage(BasePage):_loc_code = ('//div/ul/li[@class="account-tab-account"]')_loc_username = ('//input[@id="username"]')_loc_password = ('//input[@id="password"]')def login(self, username, password):self.code.click()self.username.send_keys(username)self.password.send_keys(password)

元素可单独封装 

三、测试用例

def test_00():driver = get_webdriver()driver.get("https://accounts.douban.com/passport/login")page = LoginPage(driver)page.login("12255", "123456")

 


http://www.ppmy.cn/ops/37619.html

相关文章

linux高性能服务器-线程池实现

文章目录 定义应用场景任务类型线程数量数据结构设计:任务设计:队列设计:线程池设计 接口设计 定义 线程池属于生产消费模型,管理维持固定数量线程的池式结构,避免线程频繁的创建和销毁 应用场景 当一类任务耗时&am…

【C++随记4】C++二进制位操作运算符

在C中,二进制位操作运算符允许你直接对整数类型的变量的位进行操作。这些运算符包括: 按位与(Bitwise AND): & 按位或(Bitwise OR): | 按位异或(Bitwise XOR): ^ 按位取反&…

docker 方式 elasticsearch 8.13 简单例子

安装 docker 虚拟机安装 elastic search 安装本地 # 创建 elastic 的网络 docker network create elastic # 用镜像的方式创建并启动容器 docker run -d --name es --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e "xpack.secur…

【零基础】system generator①设置卡解析

1.在matlab中我们输入的是双精度浮点型数据,经过gateway后变成定点型。十六位十四个小数位,整个数据有十六位,其中十四位给了小数 2.fixed-point定点型;signed有符号;2’s comp补码 3.量化误差 truncate,舍…

【BUUCTF】Crypto_RSA(铜锁/openssl使用系列)

【BUUCTF】Crypto_RSA(铜锁/openssl使用系列) 1、题目 在一次RSA密钥对生成中,假设p473398607161,q4511491,e17 求解出d作为flga提交 2、解析 RSA加密过程: 1)选择素数:选择两个不…

24上软考5月新通知:今年可能是最简单的一次

备考24上软考的小伙伴注意啦!软考新变动,今年软考高级科目通过率,可能会大增!!! 根据辽宁省软考办最新通知: 一、考试时间:5月25日-26日 解读:早前官方公告2024上半年软考考试时间为5月25日-28日&#xff…

八股Day1 集合

1.List Map Set的区别 2.说下集合继承关系 3.Iterator是什么?基本方法? 4.哪些集合线程不安全?怎么解决的? 5.ArrlyList和Vector的区别 6.ArrlyList和LinedList的区别 7.说下ArrayList的扩容机制 8.Set接口中 Comparator和Compara…

用HAL库改写江科大的stm32入门例子_9-1 串口发送

设置串口: 选项说明: 写一个串口发送函数: // serial send string function void serial_send_string(char *str) {HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 1000); } main函数中调用发送信息: uint8_t dat…