Подключение к работающему процессу в Winappdriver с использованием Javascript - PullRequest
0 голосов
/ 18 марта 2020

Я довольно новичок в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...