Я автоматизирую настольное приложение, используя 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. Но, тем не менее, это не работает.