我有一个由Android类库项目创建的自定义android view类,该项目名为“ components”,具有在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();
知道我在做什么错吗?
已解决
好的,我已经弄清楚了。问题出在组件类中。据此link,必须有一个名为Export属性的方法。
[Export("IsSwitchedOn")]
public bool IsSwitchedOn() {
return IsOn;
}
像这样您可以在UiTest中访问该方法。
app.Query(x => x.Id("CustomView").Invoke("IsSwitchedOn"));
答案 0 :(得分:0)
好的,我已经弄清楚了。问题出在组件类中。据此link,必须有一个名为Export属性的方法。
<!DOCTYPE html>
<html>
<style>
td
{
padding: 0.5em;
}
.color-bg-green
{
background-color: green;
}
.color-bg-red
{
background-color: red;
}
.color-bg-yellow
{
background-color: yellow;
}
.color-bg-orange
{
background-color: orange;
}
.color-fg-white
{
color: white;
}
.color-fg-black
{
color: black;
}
</style>
<body>
<table>
<?php
$rowData = [];
$rowData[] =
['id' => 1, 'number' => 123, 'date' => '2020-01-01', 'device' => 'Smartphone', 'model' => 'Galaxy', 'problem' => 'Lorem ipsum', 'status' => 'success', 'assigned' => 'Person A'];
$rowData[] =
['id' => 2, 'number' => 123, 'date' => '2020-01-01', 'device' => 'Smartphone', 'model' => 'Galaxy', 'problem' => 'Lorem ipsum', 'status' => 'failure', 'assigned' => 'Person B'];
$rowData[] =
['id' => 3, 'number' => 123, 'date' => '2020-01-01', 'device' => 'Smartphone', 'model' => 'Galaxy', 'problem' => 'Lorem ipsum', 'status' => 'success', 'assigned' => 'Person C'];
$rowData[] =
['id' => 4, 'number' => 123, 'date' => '2020-01-01', 'device' => 'Smartphone', 'model' => 'Galaxy', 'problem' => 'Lorem ipsum', 'status' => 'pending', 'assigned' => 'Person D'];
$rowData[] =
['id' => 5, 'number' => 123, 'date' => '2020-01-01', 'device' => 'Smartphone', 'model' => 'Galaxy', 'problem' => 'Lorem ipsum', 'status' => 'processing', 'assigned' => 'Person E'];
$rowData[] =
['id' => 6, 'number' => 123, 'date' => '2020-01-01', 'device' => 'Smartphone', 'model' => 'Galaxy', 'problem' => 'Lorem ipsum', 'status' => 'success', 'assigned' => 'Person F'];
foreach ($rowData as $data)
{
switch ($data['status'])
{
case 'success':
{
$rowFgColor = 'white';
$rowBgColor = 'green';
}
break;
case 'failure':
{
$rowFgColor = 'black';
$rowBgColor = 'red';
}
break;
case 'pending':
{
$rowFgColor = 'black';
$rowBgColor = 'yellow';
}
break;
default:
case 'processing':
{
$rowFgColor = 'black';
$rowBgColor = 'orange';
}
break;
}
echo "<tr class=\"color-fg-$rowFgColor color-bg-$rowBgColor\">";
foreach (['id', 'number', 'date', 'device', 'model', 'problem', 'status', 'assigned'] as $column)
echo "<td>{$data[$column]}</td>";
echo "</tr>";
}
?>
</table>
</body>
</html>
像这样您可以在UiTest中访问该方法。
[Export("IsSwitchedOn")]
public bool IsSwitchedOn() {
return IsOn;
}