2024-09-30 18:18:27 发布
网友
我目前在我的Appium和Python项目中使用page对象来运行iOS平台上的测试。现在我需要为Android实现相同的测试(应用程序是相同的)。在
我知道每个平台的定位器不同,但是我创建的函数可以用于两个平台。在
在java中,@iOSXCUITFindBy和{}注释使设计更容易实现这一目的,但是到目前为止,我还没有发现任何类似于Appium和Python的东西。在
@iOSXCUITFindBy
我可以使用什么策略在两个平台(Android和iOS)中重用相同的功能?在
我也在使用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_login_page时,它将知道在检索操作系统时要使用哪个定位器(Android或iOS) self.os =str(self.driver.desired_capabilities['platformName']).lower()在__init__方法中。在
open_login_page
self.os =str(self.driver.desired_capabilities['platformName']).lower()
__init__
执行时'login_button_' + self.os将变成'login_button_android'或{}。在
'login_button_' + self.os
'login_button_android'
这样,任何数量的操作系统版本都只需要1个方法,唯一的区别是定位器变量的名称不同,除了结尾的后缀应该是_android或_ios之外,它们需要有相同的名称。在
_android
_ios
如果使用的是XPath locator strategy,则可以使用XPath union operator-|将iOS和Android定位器组合成一个表达式:
|
def click_some_button(driver): element = driver.find_element_by_xpath("//ios/locator/here | //android/locator/here") element.click()
您可以根据platformNameDesired Capability值动态返回这个或那个WebElement:
platformName
if (driver.capabilities.get('platformName') == "android"): print("android") elif (driver.capabilities.get('platformName') == "ios"): #ios specific code else: #throw error or handle other platform
我使用Robot Framework(python)创建测试套件,用于测试iOS和Android应用程序的开发。同一个应用程序同时启动。自动化是在sprint完成的。应用程序开发过程中的自动化测试。在
最初,我们同时为两个平台创建了自动化测试。类似的想法…如果/其他。。。 几个月后我们遇到了问题。我可没那么简单。在开发过程中,跨两个移动平台的同一个应用程序的功能发生了变化。在iOS平台和Android平台上,你可以做什么(开发/技术方面)的差异在某些方面有所不同。在
它们本质上是同一个应用程序,但由于某些技术限制,它们存在差异。分配测试根本不适用于这两个平台,并且需要分配精力和丑陋的测试来限制它们。在
一个平台随后成为优先考虑的平台。但是,为两个平台的测试功能打下基础有一个企业不希望/不需要的开销,因为一个平台是优先考虑的(另一个可以在以后成为优先级)。在
六个月后放弃了双测试套件,转而使用独立于iOS测试套件的Android测试套件。在
当然有一些重叠,但分配变得更容易管理。在
如果我重新开始,我会在一开始就把它们分开。在
tldr:)将它们分开(文件夹/套件结构和功能)。在
我也在使用Appium和Python为Android和iOS自动化应用程序,我遇到了同样的问题,应用程序是相同的,但定位器当然不同。在
为了重用相同的方法,但使用不同的定位器,我提出了这个解决方案,例如:
当您现在从外部类调用
open_login_page
时,它将知道在检索操作系统时要使用哪个定位器(Android或iOS)self.os =str(self.driver.desired_capabilities['platformName']).lower()
在__init__
方法中。在执行时}。在
'login_button_' + self.os
将变成'login_button_android'
或{这样,任何数量的操作系统版本都只需要1个方法,唯一的区别是定位器变量的名称不同,除了结尾的后缀应该是
_android
或_ios
之外,它们需要有相同的名称。在如果使用的是XPath locator strategy,则可以使用XPath union operator-
|
将iOS和Android定位器组合成一个表达式:您可以根据
platformName
Desired Capability值动态返回这个或那个WebElement:我使用Robot Framework(python)创建测试套件,用于测试iOS和Android应用程序的开发。同一个应用程序同时启动。自动化是在sprint完成的。应用程序开发过程中的自动化测试。在
最初,我们同时为两个平台创建了自动化测试。类似的想法…如果/其他。。。 几个月后我们遇到了问题。我可没那么简单。在开发过程中,跨两个移动平台的同一个应用程序的功能发生了变化。在iOS平台和Android平台上,你可以做什么(开发/技术方面)的差异在某些方面有所不同。在
它们本质上是同一个应用程序,但由于某些技术限制,它们存在差异。分配测试根本不适用于这两个平台,并且需要分配精力和丑陋的测试来限制它们。在
一个平台随后成为优先考虑的平台。但是,为两个平台的测试功能打下基础有一个企业不希望/不需要的开销,因为一个平台是优先考虑的(另一个可以在以后成为优先级)。在
六个月后放弃了双测试套件,转而使用独立于iOS测试套件的Android测试套件。在
当然有一些重叠,但分配变得更容易管理。在
如果我重新开始,我会在一开始就把它们分开。在
tldr:)将它们分开(文件夹/套件结构和功能)。在
相关问题 更多 >
编程相关推荐