2012-09-14 1 views
3

iOS 응용 프로그램에 대한 자동화 테스트를 작성 중이며보기 컨트롤러가 완전히로드되어 화면에 표시 될 때 javascript 스크립트에서 감지하는 방법을 알아 내려고합니다 ...iOS UIATarget는 tap() 후에 UIViewController가로드 될 때 감지합니까?

이제는 예를 들어 스크립트 탭 버튼에 :

target.frontMostApp().mainWindow().buttons()["loginButton"].tap(); 

그런 다음 앱이 로그인하면 (몇 초 정도 걸릴 수 있음) 다른 버튼을 눌러야합니다. 지금

, 나는 그것이 단순히 지연 넣어 작동했다 :

target.delay(3); 

을하지만 내가의 요소에 액세스 할 수 있습니다 알 수 있도록 다음 뷰 컨트롤러가로드 될 때 감지 할 수 있도록하려면 새로운 화면이 방금로드되었습니다.

제안 사항? 튠업 라이브러리 here

같은위한 기능 waitUntilVisible를 참조하십시오

답변

0

검색합니다. 그 안에 기능을 지원하기위한 다른 파일을 포함 할 수 있습니다. 도움이 되길 바랍니다.

+0

나는 튠업 JS 기능은 예를 들어, 제대로 동작하지 않습니다 : mainWindow.waitUntilFoundByName ("foo는"100) accessibilityLabel 푸에 설정 한 내 컨트롤러를 찾을 수 없습니다. 어떤 아이디어? – nylund

1

대부분의 경우 다음보기 컨트롤러에 특정한 요소 만 식별하면 충분합니다. 요소의 설명은 새로운 UI에 고유 한 것이어야합니다.

target.frontmostApp().mainWindo().navigationBar()["My Next View"];

요소를 식별 할 수 있거나 시간이 초과 될 때까지 지연되어야 스크립트 (pushTimeoutpopTimout 참조).

경우에 따라 요소가 표시되도록 지정해야 할 수도 있습니다.

.withValueForKey(1, "isVisible")

그것은 역을 할 waitForInvalid을 사용하는 것도 가능하다 (멀리 이동합니다 이전 UI에서 뭔가를 기다리십시오).

2

는 그것을 달성하기 위해 몇 가지 방법이 있습니다 :

  1. 튠업 도서관 정말이 체크 아웃하는 것이 좋습니다

    https://github.com/alexvollmer/tuneup_js

    . 그들은 더 고급 테스트를 작성하는 몇 가지 유용한 래퍼 기능이 있습니다. 일부 메서드는 UIAElement 클래스를 확장하기 위해 작성되었습니다. 그들에는 waitUntilVisible() 방법이있다.

    하지만 요소 자체가 0 일 가능성이 있습니다. 그것의 시정의 문제가 아니라 단지 아직 화면에 없습니다.

  2. UIATargetInstance.pushTimeout(delay)UIATargetInstance.popTimeout()

    애플 설명서를 말한다 :

    같은 경우에 유연성을 제공하기 위해 당신에게 타이밍을 세밀하게 제어 할 수 있도록, UI 자동화는 타임 아웃 기간 동안 기간을 제공합니다 그 동안에는 실패하기 전에 지정된 조치를 반복적으로 시도합니다 ( ). 제한 시간 동안 작업이 완료되면 해당 코드 줄이 반환되고 스크립트는 진행할 수 있습니다. 제한 시간 동안 조치가 완료되지 않으면 예외가 발}합니다. 기본 제한 시간은 5 초이지만 스크립트는 언제든지이를 변경할 수 있습니다.

    도 사용할 수 있지만 다음 요소의 실행을 지연합니다. UIAutomation이 요소를 찾을 수 없다고 결정하기 전에 setTimeout(delay)을 사용하여 타임 아웃을 전역 적으로 설정할 수도 있습니다.

    여기 프레임 워크에 대한 더 많은 이해를 설명하는 Apple 가이드가 있습니다. http://developer.apple.com/library/IOS/#documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html