我目前在我的Appium和Python项目中使用页面对象,只在iOS平台上运行测试。现在我需要为Android实现相同的测试(应用程序是相同的)。
我知道每个平台的定位器是不同的,但我创建的函数可以在两个平台上使用。
在java中,@iOSXCUITFindBy和@AndroidFindBy注解使得这方面的设计变得更容易,但是到目前为止,我还没有发现任何类似的东西可以在Appium和Python中使用。
我可以使用什么策略在两个平台(Android和iOS)上重用相同的功能?
发布于 2019-08-10 16:08:16
|将iOS和Android定位器组合成一个表达式:def locator(Click_some_button):element = driver.find_element_by_xpath("//ios/locator/here | //android/locator/here") element.click()
platformName Desired Capability值动态返回这个或那个WebElement:if (driver.capabilities.get('platformName') == "android"):print("android") elif (driver.capabilities.get('platformName') == "ios"):#ios特定代码else:#抛出错误或处理其他平台
发布于 2019-08-27 19:40:58
我使用Robot Framework (python)创建了测试套件,用于测试iOS和安卓应用程序的开发。相同的应用程序,并同时启动。自动化是在sprint中完成的。在应用程序开发过程中进行自动化测试。
最初,我们同时为两个平台创建了自动化测试。类似于上面的想法...If/Else等。几个月后,我们遇到了问题。我并不像If/Else那样简单。同一个应用程序在两个移动平台上的功能在开发过程中发生了变化。在iOS和Android平台上所能做的事情(开发/技术方面)的差异在某些方面是不同的。
它们本质上是相同的应用程序,但由于一些技术限制而产生了差异。许多测试根本不适用于这两个平台,并且需要大量的努力和丑陋的测试来硬塞它们。
然后,一个平台成为了另一个平台的优先级。但是,为两个平台的测试功能奠定基础有一个开销,这是业务不想要/需要的,因为一个平台是优先考虑的(另一个可以在以后成为优先考虑的)。
在六个月后放弃了双测试套件,转而支持独立于iOS测试套件的安卓测试套件。
当然,有一些重叠,但它变得更容易管理。
如果我从头开始,我会在一开始就把它们分开。
tldr :)将它们分开(文件夹/套件结构和功能)。
发布于 2019-09-09 20:09:23
我也在使用Appium和Python自动化安卓和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_login_page时,它将知道使用哪个定位器(Android或iOS),因为我们使用检索操作系统
self.os =str(self.driver.desired_capabilities['platformName']).lower()
在__init__方法中。
在执行时,'login_button_' + self.os将变为'login_button_android'或'login_button_ios'。
这样,对于任何数量的OS版本,你只需要一个方法,唯一的区别是定位变量的名称,它们需要具有相同的名称,除了末尾的后缀应该是_android或_ios。
https://stackoverflow.com/questions/57438847
复制相似问题