- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的这个测试大约有一半的时间有效。
@Test
public void thirdSwipe() {
onView(withId(R.id.pager)).perform(swipeLeft());
onView(withId(R.id.pager)).perform(swipeLeft());
onView(withId(R.id.pager)).perform(swipeLeft());
onView(allOf(withId(R.id.hint_english_text), withText("dog 0a"))).check(matches(isDisplayed()));
}
我得到了这个失败:
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'is displayed on the screen to the user' doesn't match the selected view.
Expected: is displayed on the screen to the user
Got: "TextView{id=2131427358, res-name=hint_english_text, visibility=VISIBLE, width=624, height=62, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=20.0, y=20.0, text=dog 0a, input-type=0, ime-target=false, has-links=false}"
因此,看起来它找到了带有 "dog 0a"
的 TextView
,但它不会识别它。我看过其他问题,我确实用 String
设置了文本,这只是我类里面的几行:
private String englishText;
englishTextView.setText(englishText);
此外,我正在使用 allOf()
。任何帮助,将不胜感激。这个 View 在 ViewPager
的 View 内,所以我不确定测试是否在 ViewPager
是 idyl 之前发生,但它确实说它找到了 View .
最佳答案
对于空转问题,您肯定是在正确的轨道上。 Espresso 无法知道在执行滑动后 ViewPager 何时完全稳定下来。正如失败所暗示的那样,您正在寻找的 View 位于 View 层次结构中的某个位置,这意味着它已经被渲染,但 Espresso 检测到它还没有出现在屏幕上。这是因为 ViewPager 还没有完全定位到您感兴趣的页面上。
下一个问题是如何告诉 Espresso 等待 ViewPager 完成。这是一个有点难以解决的问题。
消除此问题可能性的一种方法是执行 Thread.sleep
,这将迫使 Espresso 等待一段时间,希望 ViewPager 在等待结束之前稳定下来。虽然这通常适用于足够长的 sleep 持续时间,但这并不理想,因为这会为您的测试增加不必要的时间。
解决此问题的最佳方法是让 ViewPager 告诉我们何时完全完成设置。
如果您看一下 ViewPager 可用的一些监听器,其中之一是 OnPageChangeListener
。 .这个类有几个回调方法:onPageScrolled
, onPageScrollStateChanged
, 和 onPageSelected
.
onPageSelected
听起来是个不错的选择,但如果您仔细查看此方法的文档,您会发现上面写着
/**
* This method will be invoked when a new page becomes selected. Animation is not
* necessarily complete.
*/
所以这行不通。
onPageScrollStateChanged
是另一个不错的候选人。这报告了 ViewPager 中的几个状态变化,即 SCROLL_STATE_DRAGGING
, SCROLL_STATE_SETTLING
, 和 SCROLL_STATE_IDLE
.所以使用这个回调,我们可以检测到 ViewPager 何时空闲。
至于如何将此监听器的实例挂接到 ViewPager 和 Espresso,您可以查看 this implementation由 Espresso 提供,用于在 DrawerLayouts 上执行操作并类似地等待它们完成。它的要点是您创建一个自定义 ViewAction 以使用将这些监听器之一附加到 ViewPager,然后执行滑动并等待 ViewPager 报告它进入了 SCROLL_STATE_IDLE
。 .
请注意,此实现使用反射来删除和包装 DrawerListener
从 DrawerLayout 如果在附加它自己之前存在,但在 ViewPager 的情况下这不是必需的,因为 ViewPager 可以有多个 OnPageChangeListeners
附在上面。
关于Android Espresso flaky withId withText 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36415746/
我正在尝试 Azure Function Apps。 遵循 Open Weather map 教程中的示例的第一个在我使用 log.WriteLine() 后停止工作,它正确地引发了编译器错误。我更改
我正在尝试 Azure Function Apps。 遵循 Open Weather map 教程中的示例的第一个在我使用 log.WriteLine() 后停止工作,它正确地引发了编译器错误。我更改
我正在使用 Protractor 测试一个非 Angular 应用程序,其中我在测试中具有类似于以下内容的登录辅助函数: function login() { return waitU
我的这个测试大约有一半的时间有效。 @Test public void thirdSwipe() { onView(withId(R.id.pager)).perform(swipeL
1) 所有被测试的设备/模拟器都禁用了动画。 2) 我有一个 @BeforeClass 来构建我的 Credentials 对象。 3) 我有一个 IntenServiceIdlingResource
我有一些 Espresso 测试在尝试单击按钮时随机失败。有时,测试会因 ViewNotFoundException 而失败。看起来这个异常期间的 Activity 状态比预期状态落后了一步。 请注意
documentation for --num-flaky-test-attempts gcloud firebase test android run 的参数如下: Specifies the nu
如果我有一个 stdout 被重定向的程序,我的 pdb 提示全部转到重定向,因为库被写入写入 stdout。 这个问题通常很微妙,让我认为程序在真正等待输入时挂起了。 人们如何解决这个问题? (不幸
我正在使用 Robot Framework 和 Selenium 来测试具有语言选择器的网站。我需要能够选择一种语言,然后验证页面实际上已更改为该语言。 由于在选择新语言后 lang 中的值 的属性标
我正在使用 Cypress 测试我的 SvelteKit 网站。我有时会遇到不稳定的测试,类似于此处描述的情况:https://www.cypress.io/blog/2019/01/22/when-
几天来我一直在尝试对此进行调试,只是无法弄清楚问题出在哪里。我最初认为这是一个顺序依赖,但我不再这么认为了,所以 rspec --bisect=verbose。 我现在倾向于 Devise/Warde
我是一名优秀的程序员,十分优秀!