4

我正在使用 Xamarin.UITest 编写测试,并且我想检查特定 UI 按钮的颜色。从 Repl 我可以像这样抓住按钮:

>>> app.Query(c => c.Button()).First()
Query for Button() gave 1 results.
{
    Id => "buttonGo",
    Description => "android.widget.Button{b312e568 VFED..C. ........ 26,234-454,314 #7f060033 app:id/buttonGo}",
    Rect => {
        Width => 428,
        Height => 80,
        X => 26,
        Y => 328,
        CenterX => 240,
        CenterY => 368
    },
    Label => null,
    Text => "Go!",
    Class => "android.widget.Button",
    Enabled => true
}

不幸的是,似乎没有任何属性可以给我颜色。有没有办法让我从按钮中提取更多信息或另一种查询方式来查找按钮颜色?


更新:所以我取得了一些进展,感谢使用 Invoke 的建议。我现在正在尝试执行以下操作:

>>> app.Query(c => c.Button("buttonGo").Invoke("getBackground"))

哪个应该调用getBackground并返回一个背景可绘制对象,但会引发以下错误:

Ignoring failed json serialisation of result of Query for Button("buttonGo").Invoke("getBackground"). Value was never requested
Query for Button("buttonGo").Invoke("getBackground") gave no results.
null

如果我调用 getHeight 一切都按预期工作,所以我在这里有点困惑:

>>> app.Query(c => c.Button("buttonGo").Invoke("getHeight"))
Query for Button("buttonGo").Invoke("getHeight") gave 1 results.
[
    [0] 80
]
4

1 回答 1

0

您正在寻找的是AppQuery.Invoke 请参阅 Xamarin.UITest 文档“ Invoke a Method on an AppResult or UI Element

更新:

我认为你不能返回复杂类型,但你可以链接Invoke调用。我的情况是:

app.WaitForElement (c => c.Button ("buttonGo")); 
app.Query(c => c.Button("buttonGo").Invoke("getBackground").Invoke("getColor"));

这将返回按钮的颜色 ID。

于 2016-02-29T14:05:21.050 回答