定位元素操作
发表于:2025-01-29 作者:千家信息网编辑
千家信息网最后更新 2025年01月29日,# -*- coding:utf-8 -*-# date = 2019/5/13# name = "yedeng"# project_name = python# explain : 从yaml文件中
千家信息网最后更新 2025年01月29日定位元素操作
# -*- coding:utf-8 -*-# date = 2019/5/13# name = "yedeng"# project_name = python# explain : 从yaml文件中读取返回webelementimport yamlfrom selenium.webdriver.remote.webdriver import WebDriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.remote.webelement import WebElementfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.common.exceptions import TimeoutExceptionfrom utils.FindWebElemet import FindWebElementfrom utils.FindBy import FindByfrom utils.log import Logfrom utils.ReadIni import Readini# yaml文件位置# Readin 读取配置文件中的等待时间''' 初始化添加对应的yaml文件位置,然后调用getAllValue方法,调用 getelement方法获取到对应的webelement 改进方法:保证yaml的文件名和test_case的文件名或者类名一致'''class ReadyamlToElement: # 获取当前脚本所在文件夹路径 def __init__(self, driver: WebDriver, yamlpath): """ 实例化readyaml类 :param driver: :param yamlpath: 对应的yaml文件名 """ self.__yamlPath = yamlpath self.__driver = driver def __getAllValue(self): """ 将指定yaml文件转化为dic字典,key为 :return dic字典 """ ''' curPath = os.path.dirname(os.path.realpath(__file__)) # 获取yaml文件路径 yamlPath = os.path.join(curPath, "cfgyaml.yaml") print(type(yamlPath)) ''' with open(self.__yamlPath, 'r', encoding='utf-8') as f: cfg = f.read() dic_yaml = yaml.load(cfg, Loader=yaml.FullLoader) # 用load方法转字典 return dic_yaml ''' 通过key获取到对应的webelement,改进方法,将其全部遍历后,生成key:element的字典,从里面取对应的数据 ''' def getelement(self, key) -> WebElement: """ 通过yaml文件的key获取到对应的Webelement :param key: yaml文件的key :return: 对应的WebElement对象 :rtype keyelement: selenium.webdriver.remote.webelement """ dic = ReadyamlToElement(self.__driver, self.__yamlPath).__getAllValue() # 接受readyaml().getAllValue()返回的dict # print(dic) if key in dic: list_value = dic.get(key) # list_Type_value = list_value[0].split(":")[1] #获取type的值 # list_Value_value = list_value[1].split(":")[1] #获取value的值 list_Type_value = list_value.get("Type") # 获取type的值 list_Value_value = list_value.get("Value") # 获取value的值 keyelement = FindWebElement(self.__driver, list_Type_value, list_Value_value).find_element(self.__yamlPath, key) # 用于返回webelement对象 Log.info(self.__yamlPath + "中获取到该element,通过该key:" + key) return keyelement else: Log.error(self.__yamlPath + "中不存在该key:" + key + ":关闭程序") # self.__driver.quit() def getelements(self, key) -> list: """ 通过yaml文件的key获取到对应的Webelement :param key: yaml文件的key :return: 对应的WebElement对象 类型为WebElement :rtype keyelements: list """ dic = ReadyamlToElement(self.__driver, self.__yamlPath).__getAllValue() # 接受readyaml().getAllValue()返回的dict # print(dic) if key in dic: list_value = dic.get(key) # list_Type_value = list_value[0].split(":")[1] #获取type的值 # list_Value_value = list_value[1].split(":")[1] #获取value的值 list_Type_value = list_value.get("Type") # 获取type的值 list_Value_value = list_value.get("Value") # 获取value的值 keyelementlist = FindWebElement(self.__driver, list_Type_value, list_Value_value).find_elements(self.__yamlPath, key) # 用于返回webelement对象 Log.info(self.__yamlPath + "中获取到该element,通过该key:" + key) return keyelementlist else: Log.error(self.__yamlPath + "中不存在该key:" + key + ":关闭程序") # self.__driver.quit() def getelementsintnum(self, key, intnum=0) -> WebElement: """ 通过yaml文件的key获取一组WebElemnts,通过数组下标获取对应的WebElemnt :param key: yaml文件的key :param intnum 数组下标 :type key : String :type intnum : int :return: 对应的WebElement对象 :rtype keyelements[intnum]: selenium.webdriver.remote.webelement """ dic = ReadyamlToElement(self.__driver, self.__yamlPath).__getAllValue() # 接受readyaml().getAllValue()返回的dict # print(dic) list_keyelements = [] if key in dic: list_value = dic.get(key) # list_Type_value = list_value[0].split(":")[1] #获取type的值 # list_Value_value = list_value[1].split(":")[1] #获取value的值 list_Type_value = list_value.get("Type") # 获取type的值 list_Value_value = list_value.get("Value") # 获取value的值 list_keyelements = FindWebElement(self.__driver, list_Type_value, list_Value_value).find_elements(self.__yamlPath, key) # 用于返回webelement对象 Log.info(self.__yamlPath + "中获取到该element,通过该key:" + key) else: Log.error(self.__yamlPath + "中不存在该key:" + key + ":关闭程序") # self.__driver.quit() # 判断输入的值是否正确,正确则正确找到,否则就报空 if -len(list_keyelements) <= intnum < len(list_keyelements): return list_keyelements[intnum] else: Log.error("当前输入的intnum大于" + str(len(list_keyelements)) + "有问题") return None def getelementsstringtext(self, key, strtext: str, attributename=None) -> WebElement: """ 通过yaml文件的key获取一组WebElemnts,通过指定元素的值获取到对应的WebElemnt :param key: yaml文件的key :param strtext 对应元素的值 :type key : str :type strtext : str :param attributename 元素的属性值,Name of the attribute/property to retrieve :type attributename : str :return: 对应的WebElement对象 :rtype element: selenium.webdriver.remote.webelement """ dic = ReadyamlToElement(self.__driver, self.__yamlPath).__getAllValue() # 接受readyaml().getAllValue()返回的dict # print(dic) list_keyelements = [] if key in dic: list_value = dic.get(key) # list_Type_value = list_value[0].split(":")[1] #获取type的值 # list_Value_value = list_value[1].split(":")[1] #获取value的值 list_Type_value = list_value.get("Type") # 获取type的值 list_Value_value = list_value.get("Value") # 获取value的值 list_keyelements = FindWebElement(self.__driver, list_Type_value, list_Value_value).find_elements(self.__yamlPath, key) # 用于返回webelement对象 Log.info(self.__yamlPath + "中获取到该element,通过该key:" + key) else: Log.error(self.__yamlPath + "中不存在该key:" + key + ":关闭程序") # self.__driver.quit() # 判断输入的值是否正确,正确则正确找到,否则就报空 booleanfind = False element = None # 当没有设备属性值时用元素的text值 if attributename is None: for webelement in list_keyelements: if webelement.text == strtext: element = webelement booleanfind = True break # 当设备属性值时用元素的指定的属性值的内容 else: for webelement in list_keyelements: if webelement.get_attribute(attributename) == strtext: element = webelement booleanfind = True break if booleanfind: return element else: Log.error(self.__yamlPath + "中未找到对应的元素值,请确认" + strtext + "的正确") return element def waitgetelement(self, key): """ 通过yaml文件的key获取到对应的Webelement,加入了显示等待,WeblEment.is_displayed()为真时返回该该webElement :param key: yaml文件的key :return: 对应的WebElement对象 """ try: inttime = Readini().getvalue("webdriver", "implicit_waitTime") WebDriverWait(self, int(inttime)).until(lambda x: x.getelement(key).is_displayed()) return self.getelement(key) except Exception as e: Log.error(self.__yamlPath + "中该元素不存在:" + key + "导致错误:" + e.__str__()) # self.__driver.quit() def waitgetelements(self, key): """ 通过yaml文件的key获取到对应的Webelement,加入了显示等待,WeblEment.is_displayed()为真时返回该该webElement :param key: yaml文件的key :return: 对应的WebElement对象 """ try: inttime = Readini().getvalue("webdriver", "implicit_waitTime") WebDriverWait(self, int(inttime)).until(lambda x: x.getelement(key).is_displayed()) return self.getelements(key) except Exception as e: Log.error(self.__yamlPath + "中该元素不存在:" + key + "导致错误:" + e.__str__()) # self.__driver.quit() def waitgetelement_clickable(self, key) -> WebElement: """ 通过yaml文件的key获取到对应的Webelement,当元素可以点击时返回webelement :param key: yaml文件的key :return: 对应的WebElement对象 :rtype keyelement: selenium.webdriver.remote.webelement """ dic = ReadyamlToElement(self.__driver, self.__yamlPath).__getAllValue() # 接受readyaml().getAllValue()返回的dict if key in dic: list_value = dic.get(key) list_Type_value = list_value.get("Type") # 获取type的值 list_Value_value = list_value.get("Value") # 获取value的值 try: # 显式等待时间 inttime = Readini().getvalue("webdriver", "implicit_waitTime") # 配合expected_conditions当元素可以点击时返回element elemnet = WebDriverWait(self.__driver, int(inttime)).until(EC.element_to_be_clickable(( FindBy(list_Type_value).find_by(), list_Value_value)), (self.__yamlPath + "中No such element : 请检查该'" + key + "'对应下的Value值是否能在页面上定位成功")) return elemnet except TimeoutException as e: Log.error(e.__str__()) def getlocator(self, key) -> tuple: """ 返回location 元组类型的值,主要给EC模块入参使用 :param key : yaml文件的key :return: tup_locator 元组类型的值如(By.Id,"value") :rtype tup_locator : tuple """ dic = ReadyamlToElement(self.__driver, self.__yamlPath).__getAllValue() # 接受readyaml().getAllValue()返回的dict if key in dic: list_value = dic.get(key) # list_Type_value = list_value[0].split(":")[1] #获取type的值 # list_Value_value = list_value[1].split(":")[1] #获取value的值 list_Type_value = list_value.get("Type") # 获取type的值 list_Value_value = list_value.get("Value") # 获取value的值 tup_locator = (FindBy(list_Type_value).find_by(), list_Value_value) if len(tup_locator) is None: Log.error(self.__yamlPath + "中请检查该'" + key + "'的值是否正确") else: return tup_locator
文件
对象
元素
方法
字典
属性
程序
文件名
类型
下标
位置
数组
时间
设备
路径
错误
检查
输入
定位
一致
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
制定网络安全法
网络技术部 主要职责
打服务器ip
数据库级联设计
网络安全靠大家班会主题班会
元亨服务器
关于初中网络安全的作文
酷酷云服务器租用的安全防御措施
阿里巴巴网络技术公司高磊
服务器主板组装游戏主机
个税软件开发流程
射频底层软件开发
网络技术提取图片
咸阳市网络安全应急中心招聘
科技微讯-互联网的一些事一些情
档案用什么数据库
pcs7数据库问题
裂变模式软件开发
excel访问数据库文件
鹤壁高中网络安全活动
网络安全测评项目
数据库中的传递函数依赖
数据库测试pdf
大连 软件开发培训学校
sql数据库2008密码
网络运营商服务器登不上
java数据库技术视频
广州pc软件开发哪家好
鸿蒙 软件开发企业
计算机网络技术系统说明书