React Native Detox - 本地和 CI 有不同的结果

Posted

技术标签:

【中文标题】React Native Detox - 本地和 CI 有不同的结果【英文标题】:React Native Detox - Local and CI have different outcomes 【发布时间】:2021-12-13 20:25:17 【问题描述】:

在本地和 CI 环境中运行 React Native Detox 测试时,我遇到了奇怪的问题。

以下是在两个环境中运行的一段代码:

import  E2E_IDS  from './constants';
import 
    executeBeforeEachTest,
    tapById,
    testAccount,
    typeTextById,
    waitForId,
    waitForText,
 from './utils';

describe('User email sign in flow test', () => 
    beforeEach(executeBeforeEachTest);

    it('should login with provided user credentials successfully', async () => 
        await tapById(E2E_IDS.SIGN_IN);
        await waitForText('Welcome back');
        await tapById(E2E_IDS.SIGN_IN_VIA_EMAIL);
        await typeTextById(E2E_IDS.SIGN_IN_EMAIL, testAccount.USER);
        await typeTextById(E2E_IDS.SIGN_IN_PASSWORD, testAccount.PASS);
        await tapById(E2E_IDS.SIGN_IN_LOGIN_BUTTON);
        await waitForText('You have no classes yet.');
    );
);

在我的本地 mac 机器上,e2e 测试运行正常。

在 Github CI mac 机器上,e2e 失败,因为单击 SIGN_IN_LOGIN_BUTTON 是不够的,如果我执行以下操作:

        await tapById(E2E_IDS.SIGN_IN_LOGIN_BUTTON, 2);

如果我们点击按钮两次,那么它通过了测试。我想知道为什么第一次点击没有被 CI 机器确认,我们不得不做两次。

如果有人可以帮助缩小这种行为的根本原因,那就太好了。

【问题讨论】:

【参考方案1】:

最后一个问题相当棘手,它实际上是一个 UX 错误。因此,当用户在登录表单中输入他们的电子邮件和密码时,当我们点击登录按钮时键盘不会掉落,因为我们有一个键盘覆盖层,它阻止了登录按钮被点击。为了规避这个问题,我们需要将keyboardShouldPersistTaps='handled'添加到***scrollView,这将触发点击事件到它的孩子,这将导致关闭键盘和点击右侧元素,一次完成。 奇怪的是为什么这在我的本地模拟器上没有发生,也许我们可以打开/关闭键盘,但这并不能帮助我缩小手头的问题。

为什么要轻按 2 次? 因为,第一个是放下键盘(非活动状态)然后下一个是点击登录按钮。

【讨论】:

以上是关于React Native Detox - 本地和 CI 有不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

React-Native 和 Detox:无法关闭位置弹出窗口

React Native Detox 模拟文件

使用 Detox 和 React Native 更改应用程序入口点

React-Native 日历议程没有用于 Detox 的 testID

Detox - 测试模式在 React Native 中的可见性

设置 Wix/Detox - 运行他们的 react native 示例