当前位置: 首页> 健康> 美食 > pythonUI自动化之selenium常用方法封装

pythonUI自动化之selenium常用方法封装

时间:2025/7/13 7:58:02来源:https://blog.csdn.net/qq_42623386/article/details/141113477 浏览次数:0次

UI自动化常见方法封装

# 文件说明:selenium关键字驱动类:用例将所有常规操作进行封装
import os
import re
from time import sleep
from selenium.webdriver import Keys, ActionChains
from selenium import webdriver
from selenium.webdriver import Chrome, DesiredCapabilities
from selenium.webdriver.chrome.options import Options
import timeclass Key:def __init__(self,headless_mode):""":param headless_mode: 是否开启无头, True开启, False关闭"""# 创建一个DesiredCapabilities对象,用于指定Chrome浏览器的配置d = DesiredCapabilities.CHROMEd['goog:loggingPrefs'] = {'performance': 'ALL'}  # 指定浏览器记录所有性能日志# 创建一个ChromeOptions对象,用于指定Chrome浏览器的启动选项chrome_options = Options()# 是否开启无头, True开启, False关闭chrome_options.headless = headless_modechrome_options = webdriver.ChromeOptions()# 自定义路径以及配置其它参数path = r"UI/TestTheDownloadedFile"prefs = {'profile.default_content_settings.popups': 0,  # 防止保存弹窗'download.default_directory': path,  # 设置默认下载路径,如果目录不存在则直接创建"profile.default_content_setting_values.automatic_downloads": 1  # 允许多文件下载}# 将自定义设置添加到chrome配置对象实例中chrome_options.add_experimental_option("prefs", prefs)# 启动带有自定义设置的chrome浏览器self.driver = webdriver.Chrome(options=chrome_options)# 浏览器操作------------------------------------------------------------------def open(self, txt):"""访问url、最大化窗口、隐式等待:param txt: 网址"""# 打开网址self.driver.get(txt)# 最大化浏览器窗口self.driver.maximize_window()# 隐式等待10秒self.driver.implicitly_wait(10)def quit(self):"""退出浏览器"""self.driver.quit()def open_new_bookmark(self, txt):"""一个浏览器打开多个页签:param txt: 网址"""js = f"window.open('{txt}')"self.driver.execute_script(js)self.driver.switch_to.window(self.driver.window_handles[-1])def switch(self, txt):"""跳转到新页签:param txt: txt传入的是数字, 传入0代表切换原始页签,输入1或N是切换新页签,从左往右数"""self.driver.implicitly_wait(2)self.driver.switch_to.window(self.driver.window_handles[txt])def window_switch(self):"""关闭当前窗口"""self.driver.switch_to.window(self.driver.window_handles[1])  # 切换到新页签self.driver.close()  # 关闭新页签self.driver.switch_to.window(self.driver.window_handles[0])  # 然后切换回原始页签def switch_new_iframe(self, value, name="xpath"):"""iframe窗口切换:param value: 元素路径:param name: 定位方法,默认为xpath"""iframe = self.driver.find_element(name, value)  # 定位iframe框架self.driver.switch_to.frame(iframe)  # 切换到iframe框架def quit_old_iframe(self):"""退出iframe"""self.driver.switch_to.default_content()def sleep(self, txt):"""强制等待:param txt: 传入时间,单位为秒:return:"""sleep(txt)def browser_zoom(self, txt):"""浏览器缩放,0.5为缩放50%,0.25为缩放0.25:param txt: 缩放值:0.5"""self.driver.execute_script(f"document.body.style.zoom='{txt}'")# 获取浏览器接口def get_url(self, url):""":param url: 需要获取的接口url:return:"""# 获取浏览器的性能日志,并将其保存为一个列表。'performance'参数表示获取性能日志。logs_list = self.driver.get_log('performance')# 循环日志列表for i in logs_list:# 如果日志中包含该接口, 则返回该行日志内容if url in i['message']:return i['message']# 元素操作函数-----------------------------------------------------------------def locator(self, value, name="xpath"):"""元素定位(可用作元素等待):param value: 元素路径:param name: 定位方法,默认为xpath:return:"""return self.driver.find_element(name, value)def input(self, txt, value, name="xpath"):"""输入:对某元素输入内容:param txt: 输入的内容:param value: 元素路径:param name: 元素定位方法"""el = self.driver.find_element(name, value)el.clear()el.send_keys(txt)def input_enter(self, txt, value, name="xpath"):"""对某元素输入内容,并敲回车:param txt: 输入的内容:param value: 元素路径:param name: 定位方法"""el = self.driver.find_element(name, value)el.clear()  # 清空输入框el.send_keys(txt)  # 输入内容sleep(0.5)el.send_keys(Keys.ENTER)def click(self, value, name="xpath"):"""点击元素:param value: 元素路径:param name: 元素定位方法"""el = self.driver.find_element(name, value)# 高亮操作元素# self.driver.execute_script(#     "arguments[0].setAttribute('style', arguments[1]);",#     el,#     "border: 2px solid red;"  # 边框border:2px; red红色# )el.click()def click_pluas(self, value, name="xpath"):"""元素点击被拦截错误处理:param value: 元素路径:param name: 元素定位方法"""el = self.driver.find_element(name, value)self.driver.execute_script("arguments[0].click();", el)def enter(self, value, name="xpath"):"""对某元素的输入框敲“回车键”:param value: 元素路径:param name: 定位方法"""self.driver.find_element(name, value).send_keys(Keys.ENTER)def get_ele_txt(self, value, name="xpath"):"""获取元素文本:param value: 元素路径:param name: 定位方法:return: 返回元素文本信息"""# el = self.driver.find_element(name, value)# self.driver.execute_script("arguments[0].scrollIntoView(false)", el)# self.driver.execute_script("arguments[0].scrollIntoView(true)", el)# return el.textstart_time = time.time()el = self.driver.find_element(name, value)while True:if el.text != "":return el.textelif time.time() - start_time >= 10:return f"超时{time.time() - start_time}秒,元素文本为None,请检查元素定位"else:# "driver.execute_script"将元素移动到可视界面self.driver.execute_script("arguments[0].scrollIntoView(false)", el)self.driver.execute_script("arguments[0].scrollIntoView(true)", el)continuedef get_element_attribute(self, txt, value, name="xpath"):"""获取元素属性值,举例:driver.find_element('xpath','//input[@id="kw"]').get_attribute('id')。id可以是任何属性名:param txt: 元素的属性名称:param value: 元素路径:param name: 定位方法:return: 返回元素属性值"""el_key = self.driver.find_element(name, value).get_attribute(txt)return el_key# 鼠标键盘操作--------------------------------------------------------------------def mouse_move(self, value, name="xpath"):"""将鼠标移动到某元素上:param value: 元素路径:param name: 定位方法"""element = self.driver.find_element(name, value)ActionChains(self.driver).move_to_element(element).perform()def mouse_press_move(self, xoffset, yoffset, value, name="xpath"):"""按住鼠标滑动:param xoffset: 横坐标:param yoffset: 纵坐标:param value: 元素路径:param name: 定位方法"""element = self.driver.find_element(name, value)ActionChains(self.driver).drag_and_drop_by_offset(element, xoffset, yoffset).perform()# 文件操作----------------------------------------------------------------------def listdir_file(self, path):"""读取某目录下所有文件:param path: 文件所在目录:return: 将以文件名称放入列表返回"""return os.listdir(path)def remove_file(self, path):"""删除某目录下所有文件:param path: 需要删除的目录:return: 删除成功返回True,删除失败返回False"""for i in os.listdir(path):os.remove(fr'{path}/{i}')file = os.listdir(path)if file == [] or None:return Trueelif file != [] or None:return False# 其它---------------------------------------------------------------------------def regular_expression(self, pattern, string):"""正则表达式。pattern:匹配的正则表达式 ; string:要匹配的字符串;:param pattern: 匹配的正则表达式:param string: 要匹配的字符串:return: 成功返回True、错误返回False"""if re.match(pattern, string) is not None:return Trueelif re.match(pattern, string) is None:return False

关键字:pythonUI自动化之selenium常用方法封装

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: