私は Appium を学び、それを WPF アプリケーションのテストに使用しようとしています。電卓またはメモ帳に対するテストは正常に実行されていますが、最近、カスタム WPF アプリケーションをテストしようとしたときに問題が発生しました。
Appium デスクトップ アプリのテストで、「指定された検索パラメーターを使用してページ上に要素を見つけることができませんでした」という例外がスローされますが、テスト実行前にアプリを起動すると問題なく合格します。したがって、セットアップ/初期化フェーズが何らかの形で間違っていると思いますが、理由はわかりません。
最初にアプリを起動せずにテストを実行すると、エラーが発生します (したがって、セットアップ フェーズでアプリを起動する必要がある場合)。テストの実行前にアプリが起動された場合、または以前の失敗したテストの実行から開いたままになっている場合でも、テストは成功します。
アプリの起動には約 10 ~ 15 秒かかり、その間に最初にスラッシュ画面が表示され、次にアプリケーションのメイン ウィンドウが表示されます。
Appium.WebDriver nuget パッケージは、プロジェクトのバージョン 3.0.0.2 で使用されます。
Thread.Sleep を 30 秒間試しましたが、問題は解決しません。
[TestFixture]
public class DesktopAppSession
{
protected WindowsDriver<WindowsElement> _session;
protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";
protected const string AppId = @"<path to app.exe>";
[SetUp]
public void TestInit()
{
if (_session != null)
return;
var appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", AppId);
appCapabilities.SetCapability("deviceName", "WindowsPC");
_session = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
Assert.IsNotNull(_session);
Thread.Sleep(TimeSpan.FromSeconds(30));
_session.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
}
[TearDown]
public void TestCleanup()
{
if (_session != null)
{
_session.Quit();
_session = null;
}
}
[Test]
public void UserInfoModalShowsUp()
{
var userInfoButtonAName = "UserInfoButtonAName";
var userInfoButtonId = "UserInfoButtonAID";
var userInfoButton = _session.FindElementByAccessibilityId(userInfoButtonId);
Assert.True(userInfoButton != null);
userInfoButton.Click();
var userDetailsTitleLabel = _session.FindElementByName("User details");
userDetailsTitleLabel?.Click();
Assert.True(true);
}
}
例外メッセージ:
System.InvalidOperationException HResult=0x80131509 Message=指定された検索パラメーターを使用してページ上に要素を見つけることができませんでした。ソース = WebDriver StackTrace: OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(レスポンス errorResponse) で OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary 2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
at OpenQA.Selenium.Appium.AppiumDriver
1.FindElement(String by, String value) で
WinAppDriver からのログ:
"POST /session/23293B57-F396-47CC-83EF-FCA491E269B0/element HTTP/1.1 Accept: application/json, image/png Content-Length: 56 Content-Type: application/json;charset=utf-8 Host: 127.0. 0.1:4723
{"using":"accessibility id","value":"UserInfoButtonAID"} HTTP/1.1 404 Not Found Content-Length: 139 Content-Type: application/json
{"status":7,"value":{"error":"そのような要素はありません","message":"指定された検索パラメーターを使用してページ上に要素を見つけることができませんでした."}}"