Проект UITest не имеет доступа к Xamarin.iOS SDK, который является SDK, который дает вам путь от реального приложения при развертывании на устройстве или симуляторе. Таким образом, пространство имен System в версии .NET / Mono Xamarin.iOS реализует некоторые вещи по-разному в зависимости от платформы, что необходимо в этом случае, так как путь к документам в iOS отличается от того, как в Android, чем в Windows,и т.д. Так вот почему пути разные.
Тем не менее, вы можете обойти это, используя метод бэкдора. См .: https://docs.microsoft.com/en-us/appcenter/test-cloud/uitest/working-with-backdoors
Это позволяет вам вызывать метод, реализованный в самом проекте iOS, тем самым используя Xamarin.iOS SDK в этом методе.
Вы внедряете метод backdoor в AppDelegate class
в своем проекте приложения для iOS следующим образом:
[Export("getMyDocumentsPath:")] // notice the colon at the end of the method name
public NSString GetMyDocumentsPath(NSString value)
{
// In through the backdoor - do some work.
return new NSString(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments));
}
Затем вызываете его из вашего проекта UI Test:
var path = app.Invoke("getMyDocumentsPath:", "").ToString();
Стоит отметить из связанного документа (на случай, если он вообще исчезнет):
В iOS IApp.Invoke может вызывать метод C # в AppDelegate проекта в соответствии со следующими правилами:
- Метод должен быть общедоступным.
- Метод должен быть украшен атрибутом ExportAttribute и идентифицировано имя открытого метода C #. Открытое имя должно добавить: (двоеточие) к имени. IApp.Invoke должен использовать форму iOS имени метода.
- Метод должен принимать параметр NSString.
- Метод должен возвращать NSString или void.