Python Appium-将页面对象设计为与iOS和Android重复使用相同的功能
我目前正在使用Appium和Python项目中的页面对象仅在iOS平台上运行测试。现在我需要为Android实现相同的测试(应用程序是相同的) 我知道每个平台的定位器是不同的,但是我创建的函数可以用于两个平台 在java中,Python Appium-将页面对象设计为与iOS和Android重复使用相同的功能,python,appium,python-appium,Python,Appium,Python Appium,我目前正在使用Appium和Python项目中的页面对象仅在iOS平台上运行测试。现在我需要为Android实现相同的测试(应用程序是相同的) 我知道每个平台的定位器是不同的,但是我创建的函数可以用于两个平台 在java中,@iosxguitfindby和@AndroidFindBy注释使设计更容易实现这一目的,但到目前为止,我还没有发现与Appium和Python类似的东西 我可以使用什么策略为两个平台(Android和iOS)重用相同的功能 如果您正在使用,您可以使用-|将iOS和Andro
@iosxguitfindby
和@AndroidFindBy
注释使设计更容易实现这一目的,但到目前为止,我还没有发现与Appium和Python类似的东西
我可以使用什么策略为两个平台(Android和iOS)重用相同的功能
|
将iOS和Android定位器组合成一个表达式:
def click_some_button(driver):
element = driver.find_element_by_xpath("//ios/locator/here | //android/locator/here")
element.click()
platformName
值,您可以动态返回该值或该值:
tldr:)将它们分开(文件夹/套件结构和功能方面)。我还在使用Appium和Python自动化Android和iOS应用程序,我遇到了同样的问题,应用程序是相同的,但定位程序当然不同 为了重用相同的方法,但使用不同的定位器,我提出了以下解决方案,例如:
class Header(Page):
def __init__(self, driver):
super(Header, self).__init__(driver)
self.os = str(self.driver.desired_capabilities['platformName']).lower()
# Android
login_button_android = (MobileBy.ID, 'com.matchbook.client:id/loginButton')
#iOS
login_button_ios = (MobileBy.ACCESSIBILITY_ID, 'LOGIN')
def open_login_page()
self.driver.find_element(*getattr(self, 'login_button_' + self.os)).click()
现在,当你在课外调用open\u login\u page
时,它将知道在我们检索操作系统时使用哪个定位器(Android或iOS)
self.os=str(self.driver.required_功能['platformName'])。lower()
在\uuuu init\uuu
方法中
执行时,“登录按钮”+self.os
将变为“登录按钮”
或“登录按钮”
这样,对于任意数量的操作系统版本,您只需要一个方法,唯一的区别在于定位器变量的名称,它们需要有相同的名称,除了末尾的后缀应该是
\u android
或\u ios
答案似乎不错。你也可以参考这个博客:,嗯Explained@dmitri-Don’谢谢你的回答。我们都知道选项1是不好的做法,它使测试速度降低了10倍。我在选项2中认为这是一种策略,但是想象一下,如果我的测试有500多个函数,我是否需要对所有函数执行if/else
?我认为这是不可能的。我想创建一个通用函数(我可以在两个平台上使用),只是替换定位器,但我仍然不知道如何实现。
class Header(Page):
def __init__(self, driver):
super(Header, self).__init__(driver)
self.os = str(self.driver.desired_capabilities['platformName']).lower()
# Android
login_button_android = (MobileBy.ID, 'com.matchbook.client:id/loginButton')
#iOS
login_button_ios = (MobileBy.ACCESSIBILITY_ID, 'LOGIN')
def open_login_page()
self.driver.find_element(*getattr(self, 'login_button_' + self.os)).click()