2.UI自动化测试框架搭建-元素查找

2022-03-29 16:37:22 浏览数 (1)

在 1.UI自动化测试框架搭建-yaml文件管理定位元素 中已经可以拿到元素了,后面就需要对元素进行操作。所有操作最基础的就是要先找到元素

查找元素

在最开始使用Selenium的时候,一般都使用find_element_by_xxx来进行元素的定位

简单阅读一下该接口的操作

代码路径:

/site-packages/selenium/webdriver/remote/webdriver.py

代码语言:javascript复制
def find_element_by_xpath(self, xpath):
    return self.find_element(by=By.XPATH, value=xpath)

所以我们使用find_element函数 定位方式 定位语句

定位方式

需要将之前的字符串变为By.XX形式,使用字典做一次映射,因为要兼容APP端,所以mobileby部分也需要做映射

  • /site-packages/selenium/webdriver/common/by.py
  • /site-packages/appium/webdriver/common/mobileby.py
代码语言:javascript复制
from selenium.webdriver.common.by import By
from appium.webdriver.common.mobileby import MobileBy

type_dict = {
    "id": By.ID,
    "xpath": By.XPATH,
    "link_text": By.LINK_TEXT,
    "partial_link_text": By.PARTIAL_LINK_TEXT,
    "name": By.NAME,
    "tag_name": By.TAG_NAME,
    "class_name": By.CLASS_NAME,
    "css_selector": By.CSS_SELECTOR,
    "ios_predicate": MobileBy.IOS_PREDICATE,
    "ios_uiautomation": MobileBy.IOS_UIAUTOMATION,
    "ios_class_chain": MobileBy.IOS_CLASS_CHAIN,
    "android_uiautomator": MobileBy.ANDROID_UIAUTOMATOR,
    "android_viewtag": MobileBy.ANDROID_VIEWTAG,
    "android_data_matcher": MobileBy.ANDROID_DATA_MATCHER,
    "android_view_matcher": MobileBy.ANDROID_VIEW_MATCHER,
    "windows_ui_automation": MobileBy.WINDOWS_UI_AUTOMATION,
    "accessibility_id": MobileBy.ACCESSIBILITY_ID,
    "image": MobileBy.IMAGE,
    "custom": MobileBy.CUSTOM,
}
locator_t = (type_dict[locator.by_type], locator.element)

这时的locator_t就相当于拿到了find_element函数的入参了

所以通过下面语句就能完成元素的查找了

代码语言:javascript复制
# { desc: "挂号",type: "xpath",value: '//p[text()="挂号"]', name: "registered" }
driver.find_element(By.XPATH, value='//p[text()="挂号"]')

# 把内容代入进去
(type_dict[locator.by_type], locator.element) =>
(type_dict["xpath"], '//p[text()="挂号"]') =>
(By.XPATH, '//p[text()="挂号"]') =>
('xpath', '//p[text()="挂号"]')
代码语言:javascript复制
driver.find_element(*locator_t)

=> driver.find_element('xpath', '//p[text()="挂号"]')

小技巧:元素高亮

通过执行js代码,临时的对要查找的元素进行红色边框标记,可以方便查看运行步骤

代码语言:javascript复制
element = driver.find_element(*locator_t)

driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
                               element, "border:2px solid red;")

小结

到这里框架中的PO模型就完成了,下面把它封装成一个基类

0 人点赞