首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Appium -设计页面对象以在iOS和安卓中重用相同的功能

Appium -设计页面对象以在iOS和安卓中重用相同的功能
EN

Stack Overflow用户
提问于 2019-08-10 10:30:34
回答 3查看 1.2K关注 0票数 2

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

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

在java中,@iOSXCUITFindBy@AndroidFindBy注解使得这方面的设计变得更容易,但是到目前为止,我还没有发现任何类似的东西可以在Appium和Python中使用。

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

EN

回答 3

Stack Overflow用户

发布于 2019-08-10 16:08:16

  1. 如果你使用的是XPath locator strategy,你可以使用XPath union operator - |将iOS和Android定位器组合成一个表达式:

def locator(Click_some_button):element = driver.find_element_by_xpath("//ios/locator/here | //android/locator/here") element.click()

  • You可以根据platformName Desired Capability值动态返回这个或那个WebElement

if (driver.capabilities.get('platformName') == "android"):print("android") elif (driver.capabilities.get('platformName') == "ios"):#ios特定代码else:#抛出错误或处理其他平台

票数 2
EN

Stack Overflow用户

发布于 2019-08-27 19:40:58

我使用Robot Framework (python)创建了测试套件,用于测试iOS和安卓应用程序的开发。相同的应用程序,并同时启动。自动化是在sprint中完成的。在应用程序开发过程中进行自动化测试。

最初,我们同时为两个平台创建了自动化测试。类似于上面的想法...If/Else等。几个月后,我们遇到了问题。我并不像If/Else那样简单。同一个应用程序在两个移动平台上的功能在开发过程中发生了变化。在iOS和Android平台上所能做的事情(开发/技术方面)的差异在某些方面是不同的。

它们本质上是相同的应用程序,但由于一些技术限制而产生了差异。许多测试根本不适用于这两个平台,并且需要大量的努力和丑陋的测试来硬塞它们。

然后,一个平台成为了另一个平台的优先级。但是,为两个平台的测试功能奠定基础有一个开销,这是业务不想要/需要的,因为一个平台是优先考虑的(另一个可以在以后成为优先考虑的)。

在六个月后放弃了双测试套件,转而支持独立于iOS测试套件的安卓测试套件。

当然,有一些重叠,但它变得更容易管理。

如果我从头开始,我会在一开始就把它们分开。

tldr :)将它们分开(文件夹/套件结构和功能)。

票数 2
EN

Stack Overflow用户

发布于 2019-09-09 20:09:23

我也在使用Appium和Python自动化安卓和iOS的应用程序,我也遇到了同样的问题,应用程序是相同的,当然定位器是不同的。

为了重用相同的方法,但使用不同的定位器,我想出了这个解决方案,例如:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57438847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档