首页 > 解决方案 > Xamarin.UITest:如何确定 Xamarin.Forms.ListView 是否正在刷新?

问题描述

在 Xamarin.UITest 中,如何确定 aXamarin.Forms.ListView是否正在刷新?

当我执行时app.Query(x => x.Class("ListViewRenderer")),我只得到这些结果:

Query for Class("ListViewRenderer") gave 1 results.                             
[
   [0] {                                                                               
        Id => null,                                                                     
        Description => "md51558244f76c53b6aeda52c8a337f2c37.ListViewRenderer{b749570 V.E...... ........ 0,0-1080,1536}",                                                
        Rect => {                                                                           
            Width => 1080,                                                                  
            Height => 1536,                                                                 
            X => 0,                                                             
            Y => 240,
            CenterX => 540,
            CenterY => 1008
        },
        Label => null,
        Text => null,
        Class => "md51558244f76c53b6aeda52c8a337f2c37.ListViewRenderer",
        Enabled => true
    }
]

标签: xamarin.formsxamarin.androidxamarin.iosxamarin.uitest

解决方案


有关更多信息,我整理了这篇博文:https ://codetraveler.io/2019/10/03/xamarin-uitest-determine-if-xamarin-forms-listview-is-refreshing/

安卓

要从 Xamarin.UITest 与 Android 上的 ListView 交互,您必须使用Invoke方法来访问本机 Java Android API中的方法。

在 Android 上,我们可以SwipeRefreshLayout.isRefreshing()像这样检查返回的值:

(bool)(app.Query(x => x.Class("ListViewRenderer_SwipeRefreshLayoutWithFixedNestedScrolling").Invoke("isRefreshing")).FirstOrDefault();

iOS

对于 iOS,我们可以检查UIRefreshControl是否可见:

app.Query(x => x.Class("UIRefreshControl")).Any()

代码示例

public bool GetIsRefreshIndicatorDisplayed(Xamarin.UITest.IApp app)
{
    if (app is AndroidApp)
        return (bool)(app.Query(x => x.Class("ListViewRenderer_SwipeRefreshLayoutWithFixedNestedScrolling")?.Invoke("isRefreshing"))?.FirstOrDefault() ?? false);

    if (app is iOSApp)
        return app.Query(x => x.Class("UIRefreshControl"))?.Any() ?? false;

    throw new NotSupportedException("Xamarin.UITest only supports Android and iOS");
}

示例应用

Here is a sample app where I've successfully implemented this methodology: https://github.com/brminnick/UITestSampleApp/blob/master/Src/UITestSampleApp.UITests/Pages/ListPage.cs


推荐阅读