coded-ui-tests

coded ui tests - "Control.Exists" dentro de un bucle funciona por primera vez y no por segunda vez en la interfaz de usuario codificada



coded-ui-tests (3)

considera el código

for(i = 0; i < 5; i++) { if(control.Exists) { mouse.Click(button); } }

En esto, el control es una ventana emergente. por primera vez de ejecución, control.Exists = true y por segunda vez es falso aunque el control esté presente. ¿Por qué es así? ¿Cómo hacer que sea verdad?

Gracias por adelantado.


Los programas a menudo dibujan otra copia de un control, se ve idéntico a la vista pero es diferente. Por lo tanto, la segunda vez alrededor del control bucle se refiere a la versión anterior del control, pero ya no está presente.

Es probable que su código sea equivalente a

for(i = 0; i < 5; i++) { if(top.middle.control.Exists) { mouse.Click(top.middle.button); } }

Puede haber más niveles en la jerarquía de control de la interfaz de usuario, pero tres son suficientes para la explicación aquí.

La solución normal es encontrar la nueva copia del control antes de usarlo. Así que cambia el código para que sea

for(i = 0; i < 5; i++) { top.middle.Find(); if(top.middle.control.Exists) { mouse.Click(top.middle.button); } }

Si eso no funciona, porque el middle tampoco está disponible, use top.Find(); .

Para obtener más información sobre qué controles están disponibles o no, intente un código como este y observe qué partes de la pantalla están resaltadas con cuadros azules.

for(i = 0; i < 5; i++) { top.DrawHighLight(); top.middle.DrawHighLight(); top.middle.control.DrawHighLight(); if(top.middle.control.Exists) { mouse.Click(top.middle.button); } }


Puede usar Inspect / UISpy para verificar el RuntimeId del control. Creo que es una especie de versión de controles descrita en la respuesta de AdrianHHH.

Pero, lo que más me confunde es que puedo usar el control encontrado por primera vez, en los siguientes bucles, aunque mi aplicación se reinicia.


Utilice TryFind () en su lugar y configure searchTimeout.