问题标签 [detox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
react-native - 在 Detox Testing 中加载 redux 存储初始状态
问题
我们有一个相当复杂的应用程序,我们不希望在每个测试用例中都经历整个过程以到达特定的屏幕来测试它,或者我们只想跳转到特定的一个,其中一些状态存储在 redux 存储中。
我试过的
我做了多个加载特定屏幕的初始状态,所以我可以直接测试它,并且对于每次运行排毒测试我加载不同的 mocha.opts 来选择这部分测试用例并使用'react-native-config'所以我可以在每次运行中加载不同的状态,例如,为了加载屏幕,我将执行以下操作:
- 为具有我当前正在测试的屏幕的所有详细信息的 redux 商店创建 initialState。
- 通过在其中指定 -f 标志创建 mocha.opts 以仅运行此测试用例。
- 创建 .env.test.screenX 文件,它将告诉商店根据我选择的 ENVFILE 加载哪个初始状态。
- 为 detox 中的每个屏幕创建不同的配置,以便它可以通过 detox CLI 加载正确的 mocha opts。
- 每次我运行命令 ENVFILE=env.test.screenX react-native run-ios 所以项目将使用此配置构建,然后我可以运行 detox test -c 。
问题
我的方法非常复杂,需要大量设置和开销来为每个屏幕运行测试,所以我想知道是否有人有同样的问题,我该如何解决?一般来说,我该如何处理 detox 中的 react native 线程?
react-native - 如何在排毒测试中获取当前活动的配置
在文档中描述了如何将多个排毒配置添加到 package.json
当我使用 运行测试时detox --configuration someconfig
,如何在测试中找出someconfig
参数(在 中someTestSuite.spec.js
)?
用例:在测试中,我想根据配置设置用户名和密码文本输入,例如。
谢谢。
react-native - 排毒平面列表不滚动
我有一个像这样的导航器结构:
stack
drawer
stack
tab
我的层次结构是:
我试图让我的平面列表向下滚动。您可以看到手指动画,但列表没有移动。你可以在这个 gif 中看到它:
屏幕录制 2018 年 3 月 16 日晚上 11 点 30 分.gif这是我的代码:
我相信问题是滚动动作从我的屏幕底部开始。当我尝试自己在那里启动滚动表单时,它也不起作用。我在 API 中没有看到任何东西可以让我在该手势开始的位置上放置一个偏移量。在检查中查看该元素表明它不在 Detox 开始其手势的区域:https ://d3vv6lp55qjaqc.cloudfront.net/items/323C3D3U3y1Y2Z1B2L2J/Screen%20Shot%202018-03-16%20at%2023.47.48.png ?X-CloudApp-Visitor-Id=2852073&v=31521c3c
react-native - 排毒 UI 测试在 CircleCI 2.0 上运行错误
我们正在构建 react-native 应用程序(仅限 iOS),对于 e2e 测试,我们使用 Detox(https://github.com/wix/detox)。当我在本地运行这些测试时,一切正常,但我无法让它们在 CircleCI (2.0) 中运行。
这是我们的 config.yml 文件的样子(在 .circleci 文件夹中)
这些是相关的 package.json 部分
在脚本下:
接着:
当我在 CircleCI 上运行这些测试时,一切都运行到了测试阶段。它在那里表现错误。首先它会找到启动的设备,但似乎 detox 跳过了它在本地运行时执行的一些设置步骤并尝试运行一些测试步骤,但这些似乎是随机选择的,甚至不是同一测试功能的一部分。
有没有人遇到过类似的问题?
react-native - 排毒代码是如何插入到应用程序包中的
我使用 detox 在 react native 上运行 e2e 测试。
一位从事排毒工作的人写的这篇文章说
灰盒本质上使用了一段植入应用程序的代码,它可以帮助我们看到里面发生了什么。
我的问题是,这是怎么发生的?查看用于命令的文档detox build
是
xcodebuild -project ios/YourProject.xcodeproj -scheme YourProject -sdk iphonesimulator -derivedDataPath ios/build
那里没有专门提到排毒。
此外,文档在此处声明 build 命令是可选的,并且
你也可以选择不使用,自己提供编译好的app。
好吧,我该怎么做?如何注入排毒/确保没有将排毒注入我的应用程序?如果我从我的 CI 服务器下载已编译的应用程序,它不适用于 detox(这并不奇怪,因为 detox 代码没有植入应用程序中)。但是,如果我使用该detox build
命令(它似乎只是运行build
配置中指定的任何命令),则测试工作。似乎发生了一些对于新手来说无法理解的“魔法”。
谢谢。
detox - 使用 toBeVisible() 期望和 tap() 操作排毒部分可见按钮的行为不同
我有一个带有 ScrollView 和 Button 的屏幕,它位于最底部并且部分可见,即按钮的顶部在屏幕中,但标题不可见,除非我向下滚动:
expect(element(by.id(BUTTON_IN_THE_BOTTOM))).toBeVisible()
=> 匹配器失败。
element(by.id(BUTTON_IN_THE_BOTTOM)).tap()
=> 一切都很好,点击按钮。
这似乎是不一致的,我认为框架在这种行为中应该是一致的。这是预期的行为吗?
正在使用排毒 7.3.2
detox - 如何使用 Detox 测试完整的应用程序流程?
我已经开始将detox
一些 e2e 集成到我的 React Native 应用程序中testing
。
到目前为止效果很好,但是我遇到了一个障碍。我正在尝试测试成功登录,并且流程有效:
- 用户输入正确的凭据
- Redux 将:
- 将用户对象存储在异步存储中
- 向对讲机注册用户
- 触发成功动作
- 将用户重定向到主屏幕 -
navigateToHomeScreen()
- 使用用户凭据更新 Sentry
navigateToHomeScreen
:
在我的Home
屏幕上,我有这个作为我的渲染功能:
在我的排毒测试中,我遇到了这种情况,但失败了:
});
我收到以下错误,提示testID="home"
找不到:
earlgrey - 在文本输入 iPad 之间移动时,排毒测试停止
我按照https://github.com/wix/detox上的说明进行了操作,创建了一些简单的测试并在 iPhone sim 上成功运行它们。但是,当使用 iPad (ios 11.2) 时,它会在两个文本输入中的第一个输入文本后停止(用于登录屏幕)。我的测试如下
正如我所说,所有测试都在 iPhone 上通过,但在 iPad 上没有通过,当查看 sim 卡时,它明显挂在第一个和第二个文本字段之间。我也试过replaceText()
导致测试失败,我认为是由于 EarlGrey https://github.com/wix/detox/issues/151的这个问题。
我搜索了这个问题,我认为它与这个https://github.com/google/EarlGrey/issues/239#issuecomment-247737738有关。如果有人知道解决方法,我将不胜感激。
谢谢。
testing - 应用状态:未定义且无休止的等待测试
不知何故,在运行我们的 e2e 排毒测试时,我们总是等待一些同步完成(如果我们禁用它并手动等待它可以工作)。
我尝试删除所有动画,但不知何故仍有一些东西在运行。
日志显示以下内容:
detox info Sync App State: undefined
detox info Sync Dispatch Queue: com.apple.main-thread
detox verb ws send: {"type":"currentStatus","params":{},"messageId":21}
detox verb ws onMessage: {"type":"currentStatusResult","messageId":21,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<UIViewController: 0x7fdc1351bf50>"],"appState":"Waiting for window's root view controller's view to appear."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x112beadc0] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x112bec300], width = 0x1, state = 0x001ffe9e00000400, dirty, max qos 6, in-flight = 0, thread = 0x403 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":21}}
detox verb ws
detox info Sync App State: undefined
detox info Sync Dispatch Queue: com.apple.main-thread
detox verb ws send: {"type":"currentStatus","params":{},"messageId":22}
detox verb ws onMessage: {"type":"currentStatusResult","messageId":22,"params":{"state":"busy","resources":[{"name":"App State","info":{"elements":["<UIViewController: 0x7fdc1351bf50>"],"appState":"Waiting for window's root view controller's view to appear."}},{"name":"Dispatch Queue","info":{"queue":"<OS_dispatch_queue_main: com.apple.main-thread[0x112beadc0] = { xref = -2147483648, ref = -2147483648, sref = 1, target = com.apple.root.default-qos.overcommit[0x112bec300], width = 0x1, state = 0x001ffe9e00000400, dirty, max qos 6, in-flight = 0, thread = 0x403 }>","prettyPrint":"com.apple.main-thread"}}],"messageId":22}}
高度赞赏此问题的任何帮助
[更新 2018/04/18]:
只是为了澄清:
我的应用组件的渲染功能是这样的:
测试通过更改isOnboardingVisible
道具从入职导航到登录屏幕,并卡在登录屏幕中等待元素可见(它在屏幕上清晰可见)。
如果我删除入职屏幕并直接在登录屏幕上开始测试,则测试有效。
这是我们在评论中要求的 AppDelegate.m:
react-native - 如何为排毒 e2e 测试提供自定义测试文件路径
我们正在使用 Detox 框架进行 IOS e2e 测试。Detox 默认创建 e2e 文件夹并运行在其下创建的所有测试文件。
有什么方法可以在其他文件夹上创建测试文件并配置该路径并运行它?