Я новичок в JS / Winappdriver.
Приложение, которое я пытаюсь протестировать, представляет собой приложение «Click Once» для Windows из .Net, поэтому мне нужно перейти на веб-сайт из 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.