-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
AndroidAppManagerOptions.cs
253 lines (222 loc) · 8.3 KB
/
AndroidAppManagerOptions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
namespace Legerity.Android;
using System;
using System.Collections.Generic;
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Enums;
/// <summary>
/// Defines a specific <see cref="AppiumManagerOptions"/> for an Android application.
/// </summary>
public class AndroidAppManagerOptions : AppiumManagerOptions
{
/// <summary>
/// Initializes a new instance of the <see cref="AndroidAppManagerOptions"/> class.
/// </summary>
public AndroidAppManagerOptions()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="AndroidAppManagerOptions"/> class.
/// </summary>
/// <param name="appPath">
/// The path of the application under test, e.g. c:/users/legerity/source/myapp/com.instagram.android.apk.
/// </param>
public AndroidAppManagerOptions(string appPath)
: this(null, null, appPath, null, null, null, null)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="AndroidAppManagerOptions"/> class.
/// </summary>
/// <param name="appPath">
/// The path of the application under test, e.g. c:/users/legerity/source/myapp/com.instagram.android.apk.
/// </param>
/// <param name="additionalOptions">
/// The additional options to apply to the <see cref="AppiumOptions"/>.
/// </param>
public AndroidAppManagerOptions(
string appPath,
params (string, object)[] additionalOptions)
: this(null, null, appPath, null, null, null, additionalOptions)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="AndroidAppManagerOptions"/> class.
/// </summary>
/// <param name="appId">
/// The ID of the application under test, e.g. com.instagram.android.
/// </param>
/// <param name="appActivity">
/// The activity of the application to start, e.g. com.instagram.android.activity.MainTabActivity.
/// </param>
public AndroidAppManagerOptions(
string appId,
string appActivity)
: this(appId, appActivity, null, null, null, null, null)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="AndroidAppManagerOptions"/> class.
/// </summary>
/// <param name="appId">
/// The ID of the application under test, e.g. com.instagram.android.
/// </param>
/// <param name="appActivity">
/// The activity of the application to start, e.g. com.instagram.android.activity.MainTabActivity.
/// </param>
/// <param name="additionalOptions">
/// The additional options to apply to the <see cref="AppiumOptions"/>.
/// </param>
public AndroidAppManagerOptions(
string appId,
string appActivity,
params (string, object)[] additionalOptions)
: this(appId, appActivity, null, null, null, null, additionalOptions)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="AndroidAppManagerOptions"/> class.
/// </summary>
/// <param name="appId">
/// The ID of the application under test, e.g. com.instagram.android.
/// </param>
/// <param name="appActivity">
/// The activity of the application to start, e.g. com.instagram.android.activity.MainTabActivity.
/// </param>
/// <param name="appPath">
/// The path of the application under test, e.g. c:/users/legerity/source/myapp/com.instagram.android.apk.
/// </param>
/// <param name="osVersion">
/// The version of Android to run the application on.
/// </param>
/// <param name="deviceName">
/// The name of the Android device to run the application on.
/// </param>
/// <param name="deviceId">
/// The ID of the Android device to run the application on.
/// </param>
/// <param name="additionalOptions">
/// The additional options to apply to the <see cref="AppiumOptions"/>.
/// </param>
public AndroidAppManagerOptions(
string appId,
string appActivity,
string appPath,
string osVersion,
string deviceName,
string deviceId,
params (string, object)[] additionalOptions)
{
this.AppId = appId;
this.AppActivity = appActivity;
this.AppPath = appPath;
this.OSVersion = osVersion;
this.DeviceName = deviceName;
this.DeviceId = deviceId;
this.AdditionalOptions = additionalOptions;
}
/// <summary>
/// Gets or sets the ID of the application under test.
/// </summary>
public string AppId { get; set; }
/// <summary>
/// Gets or sets the activity of the application to start, e.g. com.instagram.android.activity.MainTabActivity.
/// </summary>
public string AppActivity { get; set; }
/// <summary>
/// Gets or sets the path of the application under test, e.g. c:/users/legerity/source/myapp/com.instagram.android.apk.
/// </summary>
public string AppPath { get; set; }
/// <summary>
/// Gets or sets the version of Android to run the application on.
/// </summary>
public string OSVersion { get; set; }
/// <summary>
/// Gets or sets the name of the Android device to run the application on.
/// </summary>
public string DeviceName { get; set; }
/// <summary>
/// Gets or sets the ID of the Android device to run the application on.
/// </summary>
public string DeviceId { get; set; }
/// <summary>
/// Gets or sets a value indicating whether to launch the Appium server instance.
/// </summary>
public bool LaunchAppiumServer { get; set; }
/// <summary>
/// Configures the <see cref="AppiumManagerOptions.AppiumOptions"/> with the specified additional options.
/// </summary>
public override void Configure()
{
base.Configure();
this.AppiumOptions.AddAdditionalCapability(MobileCapabilityType.PlatformName, "Android");
if (!string.IsNullOrWhiteSpace(this.OSVersion))
{
this.AppiumOptions.AddAdditionalCapability(MobileCapabilityType.PlatformVersion, this.OSVersion);
}
if (!string.IsNullOrWhiteSpace(this.DeviceName))
{
this.AppiumOptions.AddAdditionalCapability(MobileCapabilityType.DeviceName, this.DeviceName);
}
if (!string.IsNullOrWhiteSpace(this.DeviceId))
{
this.AppiumOptions.AddAdditionalCapability(MobileCapabilityType.Udid, this.DeviceId);
}
if (!string.IsNullOrWhiteSpace(this.AppId))
{
this.AppiumOptions.AddAdditionalCapability("appPackage", this.AppId);
}
if (!string.IsNullOrWhiteSpace(this.AppActivity))
{
this.AppiumOptions.AddAdditionalCapability("appActivity", this.AppActivity);
}
if (!string.IsNullOrWhiteSpace(this.AppPath))
{
this.AppiumOptions.AddAdditionalCapability("app", this.AppPath);
}
}
/// <summary>
/// Configures the <see cref="AppiumOptions"/> with the specified additional options.
/// </summary>
/// <param name="additionalOptions">
/// The additional options to apply to the <see cref="AppiumOptions"/>.
/// </param>
public void Configure((string, object)[] additionalOptions)
{
this.AdditionalOptions = additionalOptions;
this.Configure();
}
/// <summary>Returns a string that represents the current object.</summary>
/// <returns>A string that represents the current object.</returns>
public override string ToString()
{
return $"Platform [Android], {base.ToString()}, {this.GetOptionDetails()}";
}
private string GetOptionDetails()
{
var options = new List<string>();
if (!string.IsNullOrWhiteSpace(this.AppId))
{
options.Add($"App ID [{this.AppId}]");
}
if (!string.IsNullOrWhiteSpace(this.AppPath))
{
options.Add($"App Path [{this.AppPath}]");
}
if (!string.IsNullOrWhiteSpace(this.DeviceId))
{
options.Add($"Device ID [{this.DeviceId}]");
}
if (!string.IsNullOrWhiteSpace(this.DeviceName))
{
options.Add($"Device Name [{this.DeviceName}]");
}
if (this.AdditionalOptions != null)
{
foreach ((string name, object value) in this.AdditionalOptions)
{
options.Add($"{name} [{value}]");
}
}
return string.Join(", ", options);
}
}