Я запускаю набор автоматических тестов пользовательского интерфейса с помощью Appium / Winappdriver в Windows 10. Среда тестирования скомпилирована в Visual Studio 2017 с использованием mstest.
Проблема, с которой я сталкиваюсь, связана с тестами, которые используютщелкните правой кнопкой мыши, чтобы открыть контекстное меню, затем выберите элемент в появившемся меню. Локально это работает. Это также работает на нашей удаленной машине CI / CD. Тем не менее, он не работает для двух других разработчиков проекта, и мы потратили два рабочих дня безрезультатно, пытаясь выяснить, почему.
У нас та же версия Windows (Windows 10, версия 1903),у нас такая же Visual Studio 2017 (мы тоже пробовали ее с 2019, не повезло), у нас одинаковое разрешение монитора (1920 x 1080), мы ориентируемся на ту же платформу .NET (4.72), у нас тот же WinAppDriver и т. д. .
Все остальное работает просто отлично. Но когда UI Test достигает этого контекстного меню, проверка завершается с ошибкой «Не удалось найти элемент на странице с использованием заданных параметров поиска».
Я использовал WinAppDriver UI Recorder, чтобы найти XPath дляэлемент. Мы также использовали его на компьютере другого пользователя и подтвердили, что для рекордера пользовательского интерфейса путь идентичен на обеих машинах.
Конкретный сбойный вызов:
Session.FindElementByXPath("/Pane[@ClassName=\"#32769\"][@Name=\"Desktop 1\"]/Menu[@ClassName=\"#32768\"][@Name=\"Context\"]/MenuItem[@Name=\"" + itemName + "\"]");
Вызов WinAppDriver на моем компьютере (успех):
{"using":"xpath","value":"/Pane[@ClassName=\"#32769\"][@Name=\"Desktop 1\"]/Menu[@ClassName=\"#32768\"][@Name=\"Context\"]/MenuItem[@Name=\"New Location\"]"}
HTTP/1.1 200 OK
Content-Length: 125
Content-Type: application/json
{"sessionId":"8970FDC1-E869-4304-A87D-D8F2CB711EA2","status":0,"value":{"ELEMENT":"42.856234.4.-2147483646.8140.18614751.1"}}
и тот же вызов на компьютере другого пользователя (сбой):
{"using":"xpath","value":"/Pane[@ClassName=\"#32769\"][@Name=\"Desktop 1\"]/Menu[@ClassName=\"#32768\"][@Name=\"Context\"]/MenuItem[@Name=\"New Location\"]"}
HTTP/1.1 404 Not Found
Content-Length: 139
Content-Type: application/json
{"status":7,"value":{"error":"no such element","message":"An element could not be located on the page using the given search parameters."}}
Опять все остальное работает. Другие тесты пользовательского интерфейса, которые не используют контекстные меню, вызываемые правой кнопкой мыши, работают нормально. Не работает только эта конкретная область.
То, что я пробовал до сих пор:
- Использование Thread.Sleep для принудительного длительного ожидания перед вызовом
- Завершение вызова с помощью DefaultWait и опрос его в течение нескольких секунд, чтобы увидеть, станет ли элемент доступным в течение этого времени.
- Когда выбрасывается «Не удалось найти элемент», повторите попытку до набора. количество раз, чтобы найти элемент.
- Много и много проверок, чтобы убедиться, что у нас одинаковая версия кода, одни и те же библиотеки, одинаковые пакеты nuget и т. д.
- Попытка гораздо более широкого локатора (Session.FindElementByName (itemName);)
Самый большой головной убор - то, что когда мы проверяем с помощью UI Recorder, элемент присутствует. Когда мы проверяем мою машину или машину удаленной сборки, WinAppDriver может найти ее как обычно. Но почему-то WinAppDriver не может найти его на машинах моего коллеги.