Appium设计页面对象,可以在iOS和Android上重用相同的功能

2024-09-30 18:18:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前在我的Appium和Python项目中使用page对象来运行iOS平台上的测试。现在我需要为Android实现相同的测试(应用程序是相同的)。在

我知道每个平台的定位器不同,但是我创建的函数可以用于两个平台。在

在java中,@iOSXCUITFindBy和{}注释使设计更容易实现这一目的,但是到目前为止,我还没有发现任何类似于Appium和Python的东西。在

我可以使用什么策略在两个平台(Android和iOS)中重用相同的功能?在


Tags: 项目对象函数目的功能应用程序page平台
3条回答

我也在使用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__方法中。在

执行时'login_button_' + self.os将变成'login_button_android'或{}。在

这样,任何数量的操作系统版本都只需要1个方法,唯一的区别是定位器变量的名称不同,除了结尾的后缀应该是_android_ios之外,它们需要有相同的名称。在

  1. 如果使用的是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()
    
  2. 您可以根据platformNameDesired Capability值动态返回这个或那个WebElement

    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:)将它们分开(文件夹/套件结构和功能)。在

相关问题 更多 >