扩展 Func<AppQuery, AppQuery> 以包含文本值?

问题描述

我正在尝试遵循此 Besy 实践 approach 并使用应用查询

例如...

using System;
using Xamarin.UITest;
using Xamarin.UITest.Queries;

namespace ourapp.UITests.Pages
{
    // Aliases Func<AppQuery,appQuery> with query
    using Query = Func<AppQuery,AppQuery>;

    public class SettingsPage : BasePage
    {
        readonly Query _logoutButton;

        protected override PlatformQuery Trait => new PlatformQuery
        {
            IOS = x => x.Id("settings_title"),Android = x => x.Id("settings_title"),};

        public SettingsPage()
        {
            _logoutButton = x => x.Id("logout_button");
        }

        public void logout()
        {
            //
        }

    }
}

但是,我正在努力确保控件具有特定的文本。

var result = app.Query(x => x.Id("logout_button"))
                .Where(x => x.Text.Equals("logout",StringComparison.InvariantCultureIgnoreCase));

但我似乎无法正确使用 FluentQuery 语法...

            _logoutButton = x => x.Id("logout_button"),.Where(x => x.Text.Equals("logout",StringComparison.InvariantCultureIgnoreCase));

CS0103: The name 'Where' does not exist in the current context

解决方法

我想它不像我希望的那么严格,我真的想包含两个属性,但我想这是一个非常简单的解决方案。

        _logoutButton = x => x.Text("logout"); 

我不太乐意接受这个,希望有什么建议,这将返回相同的对象并允许两个条件。

编辑:

或者我可以使用一个条件然后断言,这样我就知道我有正确的控制并且它有正确的文本。所以……

        protected void AssertControlHasText(Query control,string text)
        {
            var query = app.Query(control);
            var result = query?.FirstOrDefault()?.Text;

            Assert.AreEqual(text,result);
        }

        _logoutButton = x => x.Text("logout"); 

        AssertControlHasText(_logoutButton,"logout");

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...