Я довольно новичок в JS / Winappdriver.
Приложение, которое я пытаюсь протестировать, - это приложение "Click Once" на основе windows из. Net, поэтому мне нужно go для веб-сайт от IE и нажмите «Установить». Это откроет приложение.
После запуска приложения у меня нет возможности подключить приложение для выполнения взаимодействий с пользовательским интерфейсом при использовании JavaScript.
Используя C#, я просматривал процессы, ища имя процесса, получал дескриптор окна, преобразовывал его в шестнадцатеричный код, добавлял это как возможность и создавал драйвер - это работало. Пример кода ниже,
public Setup_TearDown()
{
string TopLevelWindowHandleHex = null;
IntPtr TopLevelWindowHandle = new IntPtr();
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.StartsWith($"SomeName-{exec_pob}-{exec_env}"))
{
TopLevelWindowHandle = clsProcess.Handle;
TopLevelWindowHandleHex = clsProcess.MainWindowHandle.ToString("x");
}
}
var appOptions = new AppiumOptions();
appOptions.AddAdditionalCapability("appTopLevelWindow", TopLevelWindowHandleHex);
appOptions.AddAdditionalCapability("ms:experimental-webdriver", true);
appOptions.AddAdditionalCapability("ms:waitForAppLaunch", "25");
AppDriver = new WindowsDriver<WindowsElement>(new Uri(WinAppDriverUrl), appOptions);
AppDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60);
}
Как мне это сделать в Javascript? Не получается найти примеры кода. Основываясь на примере из этого репо , я попробовал следующее в JS, чтобы найти процесс, к которому можно привязаться, но безуспешно.
import {By2} from "selenium-appium";
// this.appWindow = this.driver.element(By2.nativeAccessibilityId('xxx'));
// this.appWindow = this.driver.element(By2.nativeXpath("//Window[starts-with(@Name,\"xxxx\")]"));
// this.appWindow = this.driver.elementByName('WindowsForms10.Window.8.app.0.13965fa_r11_ad1');
// thisappWindow = this.driver.elementByName('xxxxxxx');
async connectAppDriver(){
await this.waitForAppWindow();
var appWindow = await this.appWindow.getAttribute("NativeWindowHandle");
let hex = (Number(ewarpWindow)).toString(16);
var currentAppCapabilities =
{
"appTopLevelWindow": hex,
"platformName": "Windows",
"deviceName": "WindowsPC",
"newCommandTimeout": "120000"
}
let driverBuilder = new DriverBuilder();
await driverBuilder.stopDriver();
this.driver = await driverBuilder.createDriver(currentEwarpCapabilities);
return this.driver;
}
Я продолжаю получать эту ошибку в Winappdriver
{"status":13,"value":{"error":"unknown error","message":"An unknown error occurred in the remote end while processing the command."}}
Я также открыл этот билет здесь .
Это кажется таким простым делом, но я не мог понять это.
Какой-нибудь пакет узлов, который я мог бы использовать, чтобы легко получить дескриптор окна верхнего уровня?
Я открыт для предложений о том, как решить эту проблему при использовании JavaScript для Winappdriver.