包括文本值?,c#,xamarin,xamarin.forms,xamarin.uitest"/>

首页 > 解决方案 > 扩展功能包括文本值?

问题描述

我正在尝试遵循这种 Besy Practices方法并使用应用程序查询。

例如...

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

标签: c#xamarinxamarin.formsxamarin.uitest

解决方案


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

        _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");

推荐阅读