Как использовать Appium и Playwright для тестирования пользовательского интерфейса для гибридных приложений .NET MAUI BlC#

Место общения программистов C#
Ответить
Anonymous
 Как использовать Appium и Playwright для тестирования пользовательского интерфейса для гибридных приложений .NET MAUI Bl

Сообщение Anonymous »

Я пытаюсь реализовать автоматизацию пользовательского интерфейса для гибридных приложений .NET MAUI Blazor. Для простоты я начинаю с автоматизации версии моего приложения MauiBlazor для Windows. Я обнаружил, что (после поиска в Google) для приложений Maui Blazor мне нужно использовать комбинацию инструмента автоматизации на основе приложений и инструмента автоматизации на основе веб-драйвера. Я использую Appium и Playwright в тестовом проекте .NET. Когда тест запускается, в качестве проверки работоспособности я пытаюсь распечатать текст домашней страницы/главного экрана на консоль, но не нахожу его.
Я использую этот пример приложения Maui Blazor от Microsoft: https://github.com/dotnet/blazor-sample ... iBlazorWeb
Я создал новый тестовый проект с помощью Appium и Playwright. При разработке этого тестового проекта я взял за основу этот пример проекта на сайте Microsoft Learn: https://learn.microsoft.com/en-us/sampl ... ium-nunit/
Этот проект сам по себе работал бы, если бы мое приложение было полностью создано на Мауи. Но поскольку у меня гибридное приложение, я смог только запустить его. Я не могу найти элементы в BlazorWebView.
Вот мой пример теста.

Код: Выделить всё

namespace MauiBlazorWeb.AppiumPlaywright;
public class SampleTests : BaseTest
{
[Test]
public async Task SampleTestToCheckHomePage()
{
var browser = await Playwright.Chromium.ConnectOverCDPAsync("http://localhost:9222");
var context = browser.Contexts[0];
// For some reason there are three pages
var page = context.Pages[0];
var page1 = context.Pages[1];
var page2 = context.Pages[2];

var pageText0 = await page.ContentAsync();
var pageText1 = await page1.ContentAsync();
var pageText2 = await page2.ContentAsync();
Console.WriteLine("Page0 START");
Console.WriteLine(pageText0);
Console.WriteLine("Page1 START");
Console.WriteLine(pageText1);
Console.WriteLine("Page2 START");
Console.WriteLine(pageText2);
Assert.Multiple(() =>
{
Assert.That(pageText0.Contains("Welcome to your new app."));
Assert.That(pageText1.Contains("Welcome to your new app."));
Assert.That(pageText2.Contains("Welcome to your new app."));
});

}
}
Как ни странно, Драматург находит здесь 3 разные страницы. Я ожидал только одного, поскольку это только один BlazorWebView. Все три утверждения завершаются неудачно, так как не удается найти текст домашней страницы.
Также вот код утилиты для запуска приложения MauiBlazor с помощью Appium.
Сначала класс AppiumSetup:

Код: Выделить всё

using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Windows;

namespace MauiBlazorWeb.AppiumPlaywright;

[SetUpFixture]
public class AppiumSetup
{
private static AppiumDriver? driver;

public static AppiumDriver App => driver ?? throw new NullReferenceException("AppiumDriver is null");

[OneTimeSetUp]
public void RunBeforeAnyTests()
{
// If you started an Appium server manually, make sure to comment out the next line
// This line starts a local Appium server for you as part of the test run
AppiumServerHelper.StartAppiumLocalServer();

var windowsOptions = new AppiumOptions
{
// Specify windows as the driver, typically don't need to change this
AutomationName = "windows",
// Always Windows for Windows
PlatformName = "Windows",
// The identifier of the deployed application to test
App = "com.companyname.mauiblazorweb.maui_9zz4h110yvjzm!App",
};

// Note there are many more options that you can use to influence the app under test according to your needs

driver = new WindowsDriver(windowsOptions);

}

[OneTimeTearDown]
public void RunAfterAnyTests()
{
driver?.Quit();

// If an Appium server was started locally above, make sure we clean it up here
AppiumServerHelper.DisposeAppiumLocalServer();
}
}
Затем класс AppiumServerHelper:

Код: Выделить всё

using OpenQA.Selenium.Appium.Service;

namespace MauiBlazorWeb.AppiumPlaywright;

public static class AppiumServerHelper
{
private static AppiumLocalService? _appiumLocalService;

public const string DefaultHostAddress = "127.0.0.1";
public const int DefaultHostPort = 4723;

public static void StartAppiumLocalServer(string host = DefaultHostAddress,
int port = DefaultHostPort)
{
if (_appiumLocalService is not null)
{
return;
}

var builder = new AppiumServiceBuilder()
.WithIPAddress(host)
.UsingPort(port);

// Start the server with the builder
_appiumLocalService = builder.Build();
_appiumLocalService.Start();
}

public static void DisposeAppiumLocalServer()
{
_appiumLocalService?.Dispose();
}
}
Большая часть кода взята из двух баз кода, которые я уже связал. Фактический тест — это тот, который я создал.
Может ли кто-нибудь помочь мне с тем, как мы можем автоматизировать тестирование пользовательского интерфейса в гибридных приложениях .NET MAUI Blazor?
Я бы приложил выходные данные теста, но они превышают ограничение на количество символов для этого вопроса. Вы сможете увидеть это, если запустите мой тест локально.

Подробнее здесь: https://stackoverflow.com/questions/789 ... ybrid-apps
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»