2014-06-06 2 views
1

Xamarin으로 구축 된 하이브리드 응용 프로그램을 테스트하기 위해 calabash-android-java을 사용하고 있습니다. 아래에서 볼 수 있듯이 DOM 요소를 쿼리하고 콘솔에 일부 정보를 기록 할 수 있습니다. 그러나 터치 명령을 실행할 때 어떤 이유로 든 요소를 ​​더 이상 찾을 수 없습니다.Calabash-android : "No elements found"로 터치가 실패했지만 요소가 발견되었습니다.

나는 calabash-android-java source code에서 실패한 시점을 살펴 봤지만 스크립팅 엔진으로 내 쿼리를 전달하는 것으로 보인다.

나는 터치 명령의 사용을 오해하고 있습니까? 앵커 태그를 "만질"수 있어야한다고 생각 하겠지만 아마도 그렇지 않을까요?

어쨌든 어떤 도움이라도 대단히 감사하겠습니다 ... 내 Google fu가 오늘 나를 실패했습니다.

HTML

<div style="width: 100px"> 
    <a data-role="button" ng-click="submit()" id="loginButton">Log In</a> 
</div> 

자바

@When("^user \"(.*?)\" logs in with valid credentials$") 
public void user_logs_in_with_valid_credentials(String username) throws Throwable { 
    UIElement login = app.query("webView css:'#loginButton'").first(); 
    System.out.println("Element_Id=" + login.getId()); 
    System.out.println("Element_Class=" + login.getElementClass()); 
    System.out.println("Element_Query=" + login.getQuery()); 
    System.out.println("Element_Text=" + login.getText()); 
    System.out.println("Element_Enabled=" + login.isEnabled()); 
    Rect rect = login.getRect(); 
    System.out.println("Center_X=" + rect.getCenter_x()); 
    System.out.println("Center_Y=" + rect.getCenter_y()); 
    login.touch(); 
} 

콘솔 출력

Element_Id=loginButton 
Element_Class=ui-btn ui-btn-up-c ui-shadow ui-btn-corner-all 
Element_Query=webView css:'#loginButton' index:0 
Element_Text= 
Element_Enabled=false 
Center_X=91.98979 
Center_Y=308.5714 
com.thoughtworks.calabash.android.CalabashException: Failed to touch on: webView css:'#loginButton' index:0. (RuntimeError) No elements found. Query: webView css:'#loginButton' index:0 
at com.thoughtworks.calabash.android.CalabashWrapper.touch(CalabashWrapper.java:293) 
at com.thoughtworks.calabash.android.UIElement.touch(UIElement.java:196) 
at com.mycompany.calabash.LoginStepDefs.user_logs_in_with_valid_credentials(LoginStepDefs.java:41) 
at ?.When user "[email protected]" logs in with valid credentials(C:/_Workspace/calabash-android-java/calabash-android-java/src/test/resources/features/login.feature:13) 

UPDATE : 그것은 내가 할 때 콘솔 모드에서 동일한 쿼리를 사용하여 요소를 접촉 할 수있어, 장치가 적절하게 응답하는지 주목할 필요가 :

irb(main):023:0> touch("webView css:'#loginButton'") 
{ 
    "bonusInformation" => [], 
      "message" => "", 
      "success" => true 
} 

답변

0

GitHub을 통해 Vishnu와 대화 후, 나는를 변경 할 수 있었다

CalabashWrapper.java : 그이 후에 루비 스크립트에 전달되는 쿼리 변수에 추가됩니다 :

참고, 하나는 문자열 잘라해야합니다 소스 코드는 버그를 해결하기 위해 "N 인덱스를"

public void touch(String query) throws CalabashException { 
    try { 
     info("Touching - %s", query); 
     query = query.substring(0, query.indexOf("index:")); 
     container.put(QUERY_STRING, query); 
     container.runScriptlet(String.format("touch(%s)", QUERY_STRING)); 
     pause(); 
    } catch (Exception e) { 
     error("Failed to touch on: %s", e, query); 
     throw new CalabashException(String.format("Failed to touch on: %s. %s", query, e.getMessage())); 
    } 

} 
관련 문제