FindElements не работает для элементов управления в некоторых частях некоторых программ Windows - PullRequest
0 голосов
/ 18 апреля 2019

WinAppDriver FindElement не всегда находит объекты в программе для автоматизации.

Я получил это для работы с другими программами, такими как Блокнот, и даже с другим диалоговым окном в моей программе для автоматизации, иэто работало в тех местах.

Это код, который я использую до сих пор.Первые три строки выполняются без ошибок, при этом приложение успешно запускается в диалоговом окне входа в систему:

Dim appCapabilities As DesiredCapabilities = New DesiredCapabilities()
appCapabilities.SetCapability("app", "C:\[my program].exe")
Dim ProgramSession = New WindowsDriver(Of WindowsElement)(New Uri("http://127.0.0.1:4723"), appCapabilities)

ProgramSession.FindElementByName("Password").SendKeys("Password")

В четвертой строке следует найти элемент, текстовое поле и ввести в него строку «Пароль» с помощью sendkeys,но происходит сбой, за исключением следующего:

System.InvalidOperationException: 'Не удалось найти элемент на странице с использованием заданных параметров поиска.'

Целевой объект включенэкран, и это должно работать.Я использую информацию, отображаемую для объекта в Inspect.exe, имя: «Пароль».

В окне WinAppDriver отображается следующая информация об ошибке:

{"используя":" name "," value ":" Password "}
HTTP / 1.1 404 Не найдено
Длина содержимого: 139
Тип содержимого: application / json

{"status": 7, "value": {"error": "no such element", "message": "Не удалось найти элемент на странице с использованием заданных параметров поиска."}}

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Мне удалось найти поле пароля с помощью FindElementByXPath вместо FindElementByName.

. Чтобы найти xpath, я использовал Recorder for WinAppDriver.

Эти xpathsможет быть ОЧЕНЬ долгоМне удалось сократить некоторые из них, удалив несколько дублирующих атрибутов, но некоторые из них имеют длину более 450 символов.Иногда я могу еще больше уменьшить его с помощью переменных, но я пока не очень доволен WinAppDriver в качестве замены CodedUI.

0 голосов
/ 23 апреля 2019

Четвертая строка кода выполняется сразу после запуска программы. Поскольку программе требуется некоторое время загрузки, вам нужно подождать, пока программа завершит загрузку, прежде чем пытаться найти элемент управления в графическом интерфейсе. Вы можете сделать это, используя цикл while в сочетании с секундомером для тайм-аута.

Dim shouldContinue As Boolean = True
Dim stopWatch As StopWatch = New StopWatch()
Dim timeOut As TimeSpan = TimeSpan.FromSeconds(30)
stopWatch.Start()

While shouldContinue AndAlso timeOut > stopWatch.Elapsed

    If element.IsFound Then
        shouldContinue = False
        stopWatch.Stop()
    End If
End While

element.IsFound - это просто макет кода, вам нужно будет заполнить этот пробел. Этот является хорошим Q / A, чтобы показать вам, как проверить, загружен ли элемент.

Еще одна вещь, которую вы должны принять во внимание, это вероятность того, что ваш диалог входа в систему работает в другом дескрипторе окна . Если дескриптор окна, используемый winappdriver, отличается от дескриптора окна, в котором находится ваш элемент, вы не сможете найти этот элемент.

Также проверьте, можете ли вы найти то, что вы ищете, в PageSource свойстве xml вашего драйвера. Обычно я делаю это, вызывая это свойство в окне просмотра Visual Studio и копируя его содержимое в инструмент форматирования xml.

...