Доступ к пользовательскому свойству представления в Xamarin.UiTest - PullRequest
0 голосов
/ 10 июня 2019

У меня есть пользовательский класс представления Android, созданный с помощью проекта библиотеки классов Android, который называется «компоненты» с пользовательскими свойствами, определенными в Resources / values ​​/ Attrs.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <declare-styleable name="SwitchWithData">
   ...
    <attr name="isOn" format="boolean"/>
  </declare-styleable>
</resources>

Пользовательский класс представления определен в CustomView.cs.с открытым свойством.

 public bool IsOn {
        get { return _isOn; }
        set { _isOn = value; SeIsOn(value); }
    }

При работе с настраиваемым представлением в макете или из кода я могу получить доступ к свойству.

Android-проект со ссылкой на компоненты проекта - resource / layout.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
                    ...
                    <Components.CustomView  
                     app:IsOn="true"
                     android:id="@+id/CustomView"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"/>

</LinearLayout>

Даже доступ к свойству из кода работает нормально.- MainActivity.cs

    customView = FindViewById<Components.CustomView>(Resource.Id.CustomView);
    customView.IsOn = true;

Таким образом, проблема заключается в том, чтобы получить доступ к этому свойству из проекта Xamarin.UiTest.Обычно я обращался к свойствам, вызывая метод invoke следующим образом.

app.Query(x => x.Id("Switch").Invoke("isChecked").Value<bool>()).First();

это нормально работает с нативным представлением Android, но когда я пытаюсь использовать тот же метод для доступа к свойствам моего пользовательского представления, оно возвращает пустой объект.

app.Query(x => x.Id("CustomView").Invoke("isOn").Value<bool>()).First();

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 18 июля 2019

Хорошо, я понял это.Проблема была в классе компонента. Согласно этой ссылке Должен существовать метод с именованным атрибутом Export.

    [Export("IsSwitchedOn")]
    public bool IsSwitchedOn() {
        return IsOn;
    }

Чем вы можете получить доступ к методу в UiTest, как это.

app.Query(x => x.Id("CustomView").Invoke("IsSwitchedOn"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...