小编shm*_*ova的帖子

如何检查android乐器测试中的工具栏标题?

我在YT Advanced Android Espresso上找到了很棒的乐器测试教程.我从那里拿了代码,对我的需求进行了小调整.

import static android.support.test.InstrumentationRegistry.getInstrumentation;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withChild;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withParent;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.core.AllOf.allOf;

...

@Test
public void checkToolbarTitle() {
    String toolbarTitile = getInstrumentation().getTargetContext().getString(R.string.my_bus_stops);
    onView(allOf(isAssignableFrom(TextView.class), withParent(isAssignableFrom(Toolbar.class)))).check(matches(withText(toolbarTitile)));
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它对我不起作用.测试失败:

android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: (is assignable from class: class android.widget.TextView and has parent matching: is assignable from class: class android.widget.Toolbar)
Run Code Online (Sandbox Code Playgroud)

这有什么问题?我该如何以其他方式测试?

java android android-espresso

11
推荐指数
5
解决办法
4773
查看次数

BroadcastReceiver在重新启动后接收具有延迟的事件

我尝试接收下一个BroadcastReceiver的PHONE_STATE意图

<receiver android:name=".CallReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
        <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

但是在重新启动我的Nexus 5X并拨打此设备后,可以在一分钟前呼叫完成后收到振铃事件.我该如何解决?有任何想法吗?

android broadcastreceiver

7
推荐指数
1
解决办法
1502
查看次数

如何使用 okhttp 使 dns 查找更快?

我使用 newOkHttp EventListener来调试为什么我的请求需要这么长时间。结果如下:

0,000 callStart
0,027 dnsStart
5,189 dnsEnd
5,359 secureConnectStart
5,907 secureConnectEnd
5,910 connectEnd
5,921 connectionAcquired
5,925 requestHeadersStart
5,930 requestHeadersEnd
5,938 responseHeadersStart
6,181 responseHeadersEnd
6,189 responseBodyEnd
6,233 connectionReleased
Run Code Online (Sandbox Code Playgroud)

如您所见,从dnsStart和 开始的dnsEnd时间大约需要 5 秒。我怎样才能减少这个值?有什么方法可以预热 dns 查找或缓存或其他东西?

android okhttp okhttp3

7
推荐指数
1
解决办法
1606
查看次数

更改 androidTest 清单中的 manifestPlaceholders

我有服务的清单占位符:

<service
        android:name=".MyService"
        android:process="${processName}">
Run Code Online (Sandbox Code Playgroud)

在我的 build.gradle 中我替换了它。

android {  
    defaultConfig {
        manifestPlaceholders = [
                processName: ':Proc'
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

但对于我的浓缩咖啡测试(androidTest),我需要processName. 我怎样才能做到这一点?

我尝试使用 buildTypes 执行此操作,但它不起作用(BuildType 名称不能以“androidTest”开头)

android android-espresso

6
推荐指数
1
解决办法
1914
查看次数

GEB找到第一个可见元素

我在页面上有一些隐藏的按钮.当我单击文本输入时,页面上会显示其中一个按钮.之前:

<div field='login'>
    <input type="text"> 
    <button class="submit" style="display: none">Save</button>
</div>

<div field='name'>
    <input type="text"> 
    <button class="submit" style="display: none">Save</button>
</div>
Run Code Online (Sandbox Code Playgroud)

点击第二个输入后:

<div field='login'>
    <input type="text"> 
    <button class="submit" style="display: none">Save</button>
</div>

<div field='name'>
    <input type="text"> 
    <button class="submit">Save</button>
</div>
Run Code Online (Sandbox Code Playgroud)

所以我尝试在我的测试中通过下一个选择器与第二个按钮进行交互:

static content = {
    submitButton { $("button.submit") }
}
Run Code Online (Sandbox Code Playgroud)

但我有下一个错误:

isorg.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
Run Code Online (Sandbox Code Playgroud)

如果我写:

static content = {
    submitButton { $("button.submit", 1) }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我需要使用页面上的第一个可见按钮.怎么了?

testing groovy automated-tests geb

5
推荐指数
1
解决办法
3411
查看次数

无法使用类'java.util.HashSet'转换对象'[]'

我正在尝试打开Plumble的源代码,我将gradle wrapper distributionUrl更改为4.4,然后出现了此gradle错误

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }
Run Code Online (Sandbox Code Playgroud)

我搜索并发现了gradle 4.4中的“ Compile”是未定义的,我必须使用JavaCompiler来代替,但是随后出现此错误

Could not find method jniDir() for arguments [C:\Users\NP\Desktop\Plumble-Legacy-master\build\native-libs] on task ':packageDebug' of type com.android.build.gradle.tasks.PackageApplication.
Run Code Online (Sandbox Code Playgroud)

所以我换了

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniDir new File(buildDir, 'native-libs')
}
Run Code Online (Sandbox Code Playgroud)

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniFolders = new HashSet<File>()
    pkgTask.jniFolders.add(new File(projectDir, 'native-libs'))
}
Run Code Online (Sandbox Code Playgroud)

但是现在gradle构建中出现了新错误:

Cannot cast object '[]' with class 'java.util.HashSet' to class 'org.gradle.api.file.FileCollection' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: org.gradle.api.file.FileCollection()
Run Code Online (Sandbox Code Playgroud)

有谁知道我该如何解决?任何帮助都感激不尽

java-native-interface android compilation gradle

5
推荐指数
1
解决办法
922
查看次数

setComponentEnabledSetting 如何工作?

我在我的 AndroidManifest.xml 中启用了服务。我想从我的代码中禁用它:

getPackageManager().setComponentEnabledSetting(
    serviceName, 
    PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
    PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)

如果我禁用上述服务,它会永远禁用吗?或不?

android android-service

4
推荐指数
2
解决办法
5360
查看次数

为什么PublishSubject不会发出第一个元素

我尝试使用rx和PublishSubject.所以我创建了对象:

PublishSubject<MyEvent> events = PublishSubject.create();

在我的服务中,我把MyEvent它放进去.

events.onNext(new MyEvent);

所以有时候我没有收到第一个活动,但是我收到了第二个活动.有时我收到所有活动.任何人都可以解释,这可能是什么问题?

android rx-java

1
推荐指数
1
解决办法
625
查看次数