在 1.UI自动化测试框架搭建-yaml文件管理定位元素 中已经可以拿到元素了,后面就需要对元素进行操作。所有操作最基础的就是要先找到元素
查找元素
在最开始使用Selenium
的时候,一般都使用find_element_by_xxx
来进行元素的定位
简单阅读一下该接口的操作
代码路径:
/site-packages/selenium/webdriver/remote/webdriver.py
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
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
代码,临时的对要查找的元素进行红色边框标记,可以方便查看运行步骤
element = driver.find_element(*locator_t)
driver.execute_script("arguments[0].setAttribute('style',arguments[1]);",
element, "border:2px solid red;")
小结
到这里框架中的PO模型就完成了,下面把它封装成一个基类