java - 在 native 应用程序中使用 Appium 处理弹出窗口

标签 java android ios native appium

我正在使用 Appium 使用 Java 来自动化 native iOS 和 Android 应用程序。 该应用程序具有登录/注销过程,我在每个测试用例的开始/结束时执行该过程,并且在登录应用程序时,除了我可以在那里执行的所有操作之外,还有许多随机弹出窗口“速率” us”系统,启用通知、位置使用等等。 问题是,其中一些弹出窗口被编码为以不同的间隔出现,甚至在随机时间出现,所以我现在要做的就是等待在登录后的每个案例开始时关闭它们(这需要很多时间以显示所有弹出窗口)。

有没有办法在整个案例中等待弹出窗口出现,然后在执行其他步骤时将其关闭,或者是在执行案例其余部分之前关闭所有弹出窗口的唯一解决方法?

最佳答案

我们遇到过类似的问题,到目前为止我们找到的最佳解决方案是实现弹出窗口和测试,以便应用程序的行为在测试情况下始终保持一致。然而,即使没有实际的内置支持,我们也成功地使用了以下变体。这是在 python/伪代码中,但我认为它在 Java 中应该没有太大区别。

在这里您可以处理您想要的元素,除非找不到它,在这种情况下我们假设它上面有弹出窗口。我们首先处理弹出窗口,最后应该找到我们需要的元素。

def handle_element_x(self, timeout):
    """handles element x unless there are popups overlapping it.
    """
    while elapsed_time < timeout:
        if appium._is_element_present(element_x_locator):
            // handle element x and return
            return True
        if appium._is_element_present(popup1_locator):
            // handle popup1
            continue
        if appium._is_element_present(popup2_locator):
            // handle popup2
            continue
        ...
        time.sleep(1) 

自然地,您需要使用所有可以与某些弹出窗口重叠的元素来实现它。

关于java - 在 native 应用程序中使用 Appium 处理弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36687907/

相关文章:

android studio 3.2 无法解析 ':app@debug/compileClasspath' : Could not resolve com. android.support :appcompat-v7:27. 1.1 的依赖关系

ios - 为什么 CGImageCreateWithImageInRect 使用带点的 CGRect 然后使用像素?

java - 如何在同一台服务器上运行两个 spring boot 应用程序?

Java 音频单独运行时可以正常播放,但通过单独的类运行时则不然

android - 当我在 android 中单击后退按钮时,我想对之前的 Activity 进行更改吗?

ios - 使用 AFNetworking 2.0 时为 "unacceptable content-type: application/rss+xml"

ios - << 在 Swift 语言中是什么意思?

java - 为什么这段代码不播放任何声音?

java - JUnit 的 assumeTrue 如何与 "before"和 "after"注释一起工作?

java - 在 PageViewer 中动态更新图像