当前位置: 首页 > 知识库问答 >
问题:

App Center 上的 Appium 無法在 iOS 和 Android (Java) 之間交換

羊昊苍
2023-03-14

当我编写专门在App Center上运行的appium测试时(因此必须使用自定义的“增强驱动程序”),看起来我只能将< code>driver声明为< code > EnhancedAndroidDriver 类型或< code>EnhancedIOSDriver类型。

    public EnhancedAndroidDriver<MobileElement> driver;
//    public EnhancedIOSDriver<MobileElement> driver; <----- can't declare same variable twice

public AppiumDriver<MobileElement> getDriver() throws IOException {
        String PLATFORM_NAME = System.getenv("XTC_PLATFORM");
        if (PLATFORM_NAME.equals("Android")) {
            EnhancedAndroidDriver<MobileElement> androiddriver = Factory.createAndroidDriver(new URL("http://localhost:4723/wd/hub"), caps);
            driver = androiddriver;
        } else if (PLATFORM_NAME.equals("iOS")) {
            EnhancedIOSDriver<MobileElement> iosdriver = Factory.createIOSDriver(new URL("http://localhost:4723/wd/hub"), caps);
            driver = iosdriver;  <---- compiler error, wrong type
        }
        return driver;
    }

我想在一个文件中运行一个简单的测试,该文件将在两个平台上运行,但似乎我必须选择android或ios来运行该文件。如何避免复制所有测试文件?我使用的是react native,我的应用程序在两个平台上基本相同。我对常规AppiumDriver做了类似的操作。

以编程方式切换变量驱动程序在Java中引用的“增强型IOS/Android驱动程序”类型的任何建议??

使用常规的AppiumDriver,我可以这样做:

private static AppiumDriver<MobileElement> driver;

public AppiumDriver<MobileElement> getDriver() throws IOException {
    if (PLATFORM_NAME.equals("Android")) {
       driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    } else if (PLATFORM_NAME.equals("iOS")) {
       driver = new IOSDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    }
    return driver;
}

然后在测试中通用使用驱动程序。但是在应用中心增强型驱动程序中采用这种方法似乎是不可能的,因为它们没有共同的类型(或者我对Java了解不够,无法弄清楚)。有没有办法解决这个问题??

共有1个答案

岳茂
2023-03-14

我最终编写了一个包装驱动程序的接口,它为我使用的每个驱动程序方法实例化并操作平台特定的驱动程序,并允许我使用通用名称驱动程序在测试框架的其余部分引用它。

实例化接口时,我将平台名传递给接口。平台名称被读取为我在App Center分支构建设置中设置的环境变量。

 类似资料:
  • 在文档中,appium为java提供了以下选项: 我在测试中集成了这一点,但在导航到可以使用swipe的屏幕后,使用swipe的方法将不会执行该操作。。。在故障异常面板中,我收到以下错误:“org.openqa.selenium.WebDriverException:尚未实现”。 我想从左向右滑动,但还没有找到其他解决方案。。。 更新:我已经设法通过使用以下代码刷: 问题是,它将只刷一次,即使使用

  • 我想在ios上设置wifi状态,为此,我需要从控制中心底部向上滑动。 在我将java客户端升级到4.0.0和appium升级到1.5.2之前,它工作正常。 我得到一个错误:error:VerboseError:point不在屏幕范围内 记录如下: 知道是怎么回事吗? 谢谢

  • 我正在尝试点击设置应用程序中的显示按钮。但“FindElementBy..”语句不起作用,有时我会得到“nullpointer exception”或“no such element exist”异常,有时测试通过时没有单击Display按钮。 我尝试了不同的应用程序,但仍然是FindElementBy...在Win10中不工作。但当我从Win7笔记本电脑上运行同一台真实设备时,同样的代码也在工作

  • 我有一个登录场景,当用户点击signin按钮,然后打开下一个活动,其中有一个列表。我是appium的新手,发现很难获得登录成功的验证。我没有用下面的成功 driver.switchto().window((String)driver.getwindowhandles().toarray()[windowIndex]); 请指导如何获得当前活动&移动到等待活动,这样我就可以验证对象的存在。

  • 我正在尝试滚动,它不工作的Android和iOS,可以请您帮助我在这一点。 期待你的回音。 我尝试使用ScrollTO和ScrollToExact,因为它们现在都不推荐使用,所以我尝试使用以下内容: 还是不起作用。 我看了很多博客,视频,课程内容和材料,没有人解释或有一个具体的解决方案,如何处理这一点 我尝试了下面的,仍然得到错误 WebDriverException: WebDriverExce

  • 我目前正在为Browserstack中的iOS应用程序使用Appium inspector。以前,我在搜索元素时可以很好地使用滑动功能,但在iOS上执行此操作时,它只是注册为单击。我需要知道为什么会发生这种情况,以及如何解决它。