Sendkeys не работает в Winappdriver с помощью Appium - PullRequest
0 голосов
/ 02 апреля 2020

Я автоматизирую настольное приложение, используя WinAppDriver, используя Appium на C# языке. Проблема, с которой я сталкиваюсь, заключается в том, что не работает код для взаимодействия с клавиатурой, такой как setText, keys.ArrowDown и так далее. Первоначально он работал абсолютно нормально, но в последние несколько дней он вообще перестал работать. Кто-нибудь может подсказать, что делать?

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

namespace UITest
{
public class Test
{
    public string Name { get; set; } = string.Format("A_EN_{0}", DateTime.Now.Ticks.ToString());
    public string Description { get; set; } = string.Format("A_ED_{0}", DateTime.Now.Ticks.ToString());
    private readonly Records records = null;
    public Test()
    {
        records = new Records();
    }

    public void SetValue(string fieldName, string value = "", bool pressTab = true)
    {
        string propValue;
        if (!string.IsNullOrWhiteSpace(value))
        {
            propValue = value;
        }
        else
        {
            propValue = Common.GetPropValue(this, fieldName).ToString();
        }
        switch (fieldName)
        {
            case "Name":
                Common.RE7Session.FindElementByAccessibilityId("30").SendKeys(propValue);
                break;
            case "Description":
                Common.RE7Session.FindElementByAccessibilityId("18").SendKeys(propValue);
                break;
        }
        if (pressTab)
        {
            Common.SendKeys(Keys.Tab);
        }
    }

      public void AddEvent(Common.SaveOptions saveOptions = Common.SaveOptions.None)
    {
        Common.RE7Session.OpenFunctionalArea("Records");
        records.OpenTask("Events");
        Common.RE7Session.FindElementByName("New Event").Click();
        Common.RE7Session.SwitchWindowWithWait(3);
        this.SetValue(nameof(this.Name));
        this.SetValue(nameof(this.Description));
        Common.RE7Session.SetText("test");
        Common.SendKeys(Keys.ArrowDown);
        Common.RE7Session.PressTab();
        Common.RE7Session.SetText(new Random().Next(10000, 99999).ToString(), false);

    }   

Здесь, в последнем коде строк, SetText, PressTab, Key.ArrowDown, ничего из этого не работает. Ниже приведены методы PressTab, SendKeys:

public static void PressTab(this WindowsDriver<WindowsElement> RE7Session, int iteration = 1)
    {
        for (int i = 0; i < iteration; i++)
        {
            Common.SendKeys(Keys.Tab);
        }
    }

public static void SendKeys(string keysToSend)
    {
        System.Windows.Forms.SendKeys.SendWait(ReplaceKeyCode(keysToSend));
        Sleep(100);
    }

private static string ReplaceKeyCode(string keys)
    {
        keys = keys.Trim('+');
        //Action characters like tab, arrow down and etc
        keys = keys.Replace(Keys.Backspace, "{BACKSPACE}");
        keys = keys.Replace(Keys.Delete, "{DELETE}");
        keys = keys.Replace(Keys.ArrowDown, "{DOWN}");
        keys = keys.Replace(Keys.End, "{END}");
        keys = keys.Replace(Keys.Enter, "{ENTER}");
        keys = keys.Replace(Keys.Escape, "{ESC}");
        keys = keys.Replace(Keys.Help, "{HELP}");
        keys = keys.Replace(Keys.Home, "{HOME}");
        keys = keys.Replace(Keys.Insert, "{INSERT}");
        keys = keys.Replace(Keys.ArrowLeft, "{LEFT}");
        keys = keys.Replace(Keys.PageDown, "{PGDN}");
        keys = keys.Replace(Keys.PageUp, "{PGUP}");
        keys = keys.Replace(Keys.ArrowRight, "{RIGHT}");
        keys = keys.Replace(Keys.Tab, "{TAB}");
        keys = keys.Replace(Keys.ArrowUp, "{UP}");
        keys = keys.Replace(Keys.F1, "{F1}");
        keys = keys.Replace(Keys.F2, "{F2}");
        keys = keys.Replace(Keys.F3, "{F3}");
        keys = keys.Replace(Keys.F4, "{F4}");
        keys = keys.Replace(Keys.F5, "{F5}");
        keys = keys.Replace(Keys.F6, "{F6}");
        keys = keys.Replace(Keys.F7, "{F7}");
        keys = keys.Replace(Keys.F8, "{F8}");
        keys = keys.Replace(Keys.F9, "{F9}");
        keys = keys.Replace(Keys.F10, "{F10}");
        keys = keys.Replace(Keys.F11, "{F11}");
        keys = keys.Replace(Keys.F12, "{F12}");
        keys = keys.Replace(Keys.Add, "{ADD}");
        keys = keys.Replace(Keys.Subtract, "{SUBTRACT}");
        keys = keys.Replace(Keys.Multiply, "{MULTIPLY}");
        keys = keys.Replace(Keys.Divide, "{DIVIDE}");

        //Special Keys like control, shift and alt
        keys = keys.Replace(Keys.Control, "^");
        keys = keys.Replace(Keys.LeftControl, "^");
        keys = keys.Replace(Keys.Shift, "+");
        keys = keys.Replace(Keys.LeftShift, "+");
        keys = keys.Replace(Keys.Alt, "%");
        keys = keys.Replace(Keys.LeftAlt, "%");
        return keys;
    }

В библиотеке произошли некоторые изменения, из-за которых прямые клавиши. [Ключ] не работает. Следовательно, я внес изменения в ключи, используя вышеупомянутый метод relayceKeyCode. Но, тем не менее, это не работает.

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