我想知道是否有任何关于在WWDC 2015中引入的XCode 7中的新UI测试的文档.如果没有文档,是否有任何用户生产的版本值得关注?
谢谢
我有用于测试MyApp的UI测试目标.要测试特定的MyApp条件,我需要将通知从UI测试目标发布到MyApp目标.要从UI测试目标函数发布通知,我使用此:
NSNotificationCenter.defaultCenter().postNotificationName(name, object: nil, userInfo: aUserInfo)
Run Code Online (Sandbox Code Playgroud)
看起来这个通知永远不会从UI测试目标到达观察者,但是从MyApp目标发布此通知时它可以正常工作.
如何从UI Target发布通知到MyApp目标?
使用Xcode 7.
我正面临着一个我一直试图解决的大问题.我正在尝试使用robotium运行测试,但是当我调用getActivity()setup方法时,RuntimeException会抛出异常.
java.lang.RuntimeException:无法在45秒内启动意图Intent {act = android.intent.action.MAIN flg = 0x14000000 cmp = com.company.app/.SplashActivity}.也许主线程在合理的时间内没有闲置?可能会有一个动画或不断重新绘制屏幕的东西.或者活动是在创建网络呼叫?请参阅threaddump日志.在您的活动启动请求为1463908619275之前,事件队列最后一次空闲以供您参考,现在队列最后一次空闲时间是:1463908619275.如果这些数字相同,您的活动可能会占用事件队列.
我正在使用机器人5.4.4
我有一个TabHostActivity有4个选项卡(和4个相应的活动).在测试中我点击其中一个them("Search")SearchActivity应该出现(实际上它).问题是在Robotuim-test中我尝试使用等待此活动solo.waitForActivity(),即使活动在屏幕上也无法运行.此外,所有此活动的视图都不可用solo.getView()- 返回nulls.
我正在为现有应用程序整合黄瓜测试阶段.该应用程序与后端进行大量交互.最简单的情况是注册用户.
为了使测试可重复,我不能违背(真正的)后端(出于几个原因,一个人无法使用相同的电子邮件注册两个用户).
我想知道我有哪些选项可以模拟后端行为并提供模拟响应.对于单元测试,我知道Nocilla和其他几个框架.当然,将它们集成在一起不适用于葫芦测试.
一种替代方案是运行一个真正的服务器,我从葫芦测试中控制它来控制网络.但这似乎有点矫枉过正.另一个选择是在calabash目标中有模拟对象,我可以通过calabash后门机制控制它.
我怀疑这不是唯一的选择.所以我的问题是:有更优雅的方式吗?
我有一个使用核心数据的应用程序.应用程序的行为会有所不同,具体取决于是否已填充该数据.
我希望在每个测试用例之前,核心数据将被清空,使每个测试用例在一个新的应用程序实例上运行.测试用例不应该依赖于某些测试设备的状态,特别是因为其他测试用例操纵这种状态.不幸的是,默认情况下,核心数据不仅存在于测试用例之间,还存在于完全独立的测试运行之间.我正试图解决这个问题.
我的第一个想法是将所有核心数据转储到拆解功能中.这样每个测试都会自行清理.不幸的是,我无法使用此命令获取NSManagedObjectContext:
let context = (UIApplication.sharedApplication().delegate as! MyApp.AppDelegate).managedObjectContext!
Run Code Online (Sandbox Code Playgroud)
因为它有这个编译错误:
Undefined symbols for architecture x86_64: "type metadata accessor for MyApp.AppDelegate", referenced from: MyAppUITests.MyAppUITests.tearDown
Run Code Online (Sandbox Code Playgroud)
为了解决这个错误,我尝试将UITests添加到AppDelegate目标成员资格并进行操作@testable import MyApp.都没有奏效.我需要managedObjectContext来清空核心数据.
现在我认为必须有一种更好的,内置的方式来在每个测试用例运行的开始或结束时转储所有核心数据.它最好是在最后,因为每个测试应该自己清理.有谁知道如何做到这一点?
提前致谢!
我正在尝试使用espresso框架为Android APP编写一些UI测试.
现在我只是检查启动画面上是否存在所有元素,然后我尝试单击登录按钮.
单击该按钮时,测试失败,因为我似乎无法理解为什么会发生错误.
我的测试代码是
@RunWith(AndroidJUnit4.class)
@SmallTest
public class WelcomeTest {
@Rule
public ActivityTestRule<Welcome> mActivityRule = new ActivityTestRule<>(
Welcome.class);
@Test
public void elements_present() {
// Check login
onView(withId(R.id.wv_login)).check(matches(isDisplayed()));
// Check signup
onView(withId(R.id.wv_signup)).check(matches(isDisplayed()));
// Check video
onView(withId(R.id.videoView)).check(matches(isDisplayed()));
// Check swipe right
onView(withId(R.id.videoView)).perform(swipeRight());
// Check swipe left
onView(withId(R.id.videoView)).perform(swipeLeft());
}
@Test
public void tap_login() {
// Tap login button
onView(withId(R.id.wv_login)).perform(click());
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
引发者:java.lang.RuntimeException:将不执行操作,因为目标视图与以下一个或多个约束不匹配:至少90%的视图区域显示给用户.
这是什么意思,这是由我的测试方法引起的还是代码中的错误?该应用程序似乎在我的设备上工作得很好.
PS:我已经禁用了espresso文件建议的动画
我编写了一个 Espresso 测试,将一些文本写入 TextView,执行操作,然后检查 TextView 中的文本是否仍然相同。
在其中一台测试设备(华为 P20、Android 8.1.0)上测试失败,因为输入的文本会自动更正(从1234 5678到12th 5678)。这没有通过我的测试。当我手动输入相同的数字时,文本不会自动更正。
这就是我在 Espresso 测试中输入文本的方式:
onView(withId(R.id.reference_value))
.perform(scrollTo(), click())
.check(matches(isDisplayed()))
.perform(typeText("1234 5678"));
closeSoftKeyboard();
Run Code Online (Sandbox Code Playgroud)
我知道我可以将输入文本更改为不会自动更正的内容。但我希望有一个解决方案,通常可以确保输入的文本不会被修改为其他内容。理想情况下,无需手动更改测试设备的配置。
你们中有人知道我该如何实现这一目标吗?
android ui-testing android-espresso swift-keyboard android-8.1-oreo
通过以下代码片段,我一直在尝试使用 Espresso(用于自动填写用户输入字段)使用OpenID OAuth 2.0 库UiAutomator测试登录身份验证流程,其中通过自定义 Chrome Tab 意图在外部进行登录成功登录通过启动活动的回调将用户带回应用程序,然后运行一些逻辑(通过验证在这种情况下是否显示下一个屏幕的视图来断言屏幕确实发生了变化)。但事实证明,该应用程序在登录后无法正确恢复,稍后会抛出.onActivityResult()NoActivityResumedException
是的,我尝试过使用Espresso-Intents,但无法弄清楚如何在这种情况下将其绑定,因为我将尽可能测试登录屏幕中的整体登录流程ActivityTestRule,特别是触发其自己的意图(身份验证请求按下登录按钮后。我觉得到目前为止我走在正确的轨道上,所以任何帮助我指明正确方向的帮助将不胜感激!
登录屏幕:
class LoginActivity : AppCompatActivity() {
companion object {
const val RC_AUTH_LOGIN = 100
}
private lateinit var authService: AuthorizationService
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
initAuthService()
initViews()
}
override fun onDestroy() {
authService.dispose()
super.onDestroy()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK) {
when (requestCode) {
RC_AUTH_LOGIN -> initViewModelAndObserve(data)
else -> …Run Code Online (Sandbox Code Playgroud) 我目前正在使用 Cypress 进行 UI 集成测试。我正在寻找在 cypress 中添加类似于标准 TestNG 的测试用例分组的方法。我在 cypress 文档中找不到任何分组功能。我确实找到了这篇文章:使用标签进行分组的链接。我正在寻找一种更简单的测试用例分组方法。
这是我的用例:我对不同的功能进行了测试,例如下面示例中的功能 1、2、3,每个功能都有不同的测试用例。我想对功能 1 等单个功能运行测试。有没有办法运行功能 1 的 test1。注意:我不是在寻找 .only 或 .skip。我想添加分组并使用 CLI 为特定组运行这些测试。以前有人从事过这些工作吗?
describe('Feature1', () => {
it('test1', () => {
})
it('test2', () => {
})
it('test3', () => {
})
})
describe('Feature2', () => {
it('test1', () => {
})
it('test2', () => {
})
it('test3', () => {
})
})
describe('Feature3', () => {
it('test1', () => {
})
it('test2', () => { …Run Code Online (Sandbox Code Playgroud)