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

React Native Detox - Local and CI have different outcomes

我在 运行 本地和 CI 环境中使用 React Native Detox 测试时遇到了 st运行ge 问题。

以下是在两种环境中 运行 的代码片段:

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 machine 上,e2e 测试按预期运行良好。

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

        await tapById(E2E_IDS.SIGN_IN_LOGIN_BUTTON, 2);

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

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

最后一个问题比较棘手,它实际上是一个用户体验错误。因此,当用户在登录表单中输入他们的电子邮件和密码时,当我们点击登录按钮时键盘不会掉落,因为我们有一个键盘覆盖层阻止了登录按钮被点击。为了避免这个问题,我们需要将 keyboardShouldPersistTaps='handled' 添加到顶层 scrollView ,这将触发点击事件到它的 child 这将导致关闭键盘加上点击到右边的元素,所有一气呵成。 很奇怪为什么这在我的本地模拟器上没有发生,也许我们可以切换键盘 on/off 这并没有帮助我缩小手头的问题。

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