2012-11-29 8 views
-1

배경 : 페이지 개체와 Rspec을 사용하고 있습니다. 페이지, 개체가 올바르게 설정됩니다. 기본적으로 발생하는 것은 while 문을 건너 뛰고 페이지에 변수 label이 있는지 직접 확인하는 것입니다.문이 작동하지 않는 이유는 무엇입니까?

변수에 페이지에 label 변수가 있는지 확인한 다음 20 초 기다렸다가 페이지를 새로 고친 다음 다시 최대 30 번 확인하고 30 번째 오류가 발생하면 모두 실패합니다 함께. 발견하면 다시 점검하고 통과해야합니다.

def check_label(label, current_page) 
    labels_filter_element.click 
    check_label_sla(label, current_page) 
    current_page.text.should include label 
end 

def check_label_sla(label, current_page) 
    t = 30 
    i = 0 
    while i < t 
    if current_page.text.should include label 
     return 
    else 
     sleep(20) 
     current_page.refresh 
     i += 1 
    end 
    end 
end 

나는 current_page.text.should include label 항상 TRUE 반환하는 경우입니다 무슨 일이 일어나고 있는지 생각하지만, 잘 모르겠어요. 더 많은 정보가 필요하시면 알려주십시오.

답변

1

나는 다음과 같은 가정을 만드는 중이라서 :

  • 당신이보고있는 동작은 페이지가 처음 레이블이 페이지에없는 시험이 상쾌하지 않고 즉시 실패의 labels_filter_element 클릭 할 때,로드이다 페이지.
  • label
  • 이러한 가정을 감안할 때 문자열

인 문제가 함께있는 경우 문 다음 if 문이 실행되면

if current_page.text.should include label 

, 그것은 페이지가 라벨을 포함하는 것을 주장한다 : 페이지가 레이블이있는 경우, 경우의 코드가 실행됩니다

  • (즉, 즉시 check_label 줘야의 주장을 반환 할 것이다 l pass).
  • 페이지에 레이블이없는 경우 어설 션이 예외를 throw하여 테스트를 즉시 실패하게 만듭니다 (즉, else 코드가 실행되지 않음). 따라서 테스트는 check_label_sla 메서드 내에서 실패합니다. check_label method의 끝이 아닙니다 (while 루프가 작동하지 않는 것처럼 보입니다).

if 문에서 어설 션을 수행하지 않고 텍스트가 포함되어 있는지 확인합니다.

if current_page.text.include? label 

그래서 당신의 check_label_sla 방법이 될 것입니다 :

def check_label_sla(label, current_page) 
    t = 30 
    i = 0 
    while i < t 
    if current_page.text.include? label 
     return 
    else 
     sleep(20) 
     current_page.refresh 
     i += 1 
    end 
    end 
end 

을 또는 당신은 그것을 줄일 수 : 따라서 당신이 원하는

올바른
def check_label_sla(label, current_page) 
    30.times do 
    return if current_page.text.include? label 
    sleep(20) 
    current_page.refresh 
    end 
end 
+0

, 감사합니다. –

관련 문제