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:无法关闭位置弹出窗口
使用 Detox 和 React Native 更改应用程序入口点
React-Native 日历议程没有用于 Detox 的 testID