2013-10-20 2 views
0

페이지 개체 메서드 호출을 사용하여 페이지에서 개체를 반환하는 데 문제가 있습니다.페이지 개체에서 메서드 호출이 결과를 반환하지 않습니다.

class LogIn 
    include PageObject 

    ... 
    h3(:error_message, :class => 'no-margin white-text') 

    ... 

    def log_in (access_number, user_id, password) 
    self.access_number = access_number 
    self.user_id = user_id 
    self.password = password 
    log_me_in 
    AccountSummary.new(@browser) 
    end 

.... 
def get_error_message 
    self.error_message 
    end 
    .... 
end 

다음 줄이 더 출력을 의지를 반환 이유 : 여기

... 
    class TestLogIn < Test::Unit::TestCase 
    ..... 
     def test_failed_log_in 
     @log_in_page= LogIn.new(@browser) 
     @log_in_page.go_to_log_in 

     @log_in_page.log_in("174773476","test","aaa111as") 

     puts @log_in_page.error_message 
     puts @log_in_page.get_error_message 
     end 

    end 

클래스 내 로그가 아래에 정의되어 test_log_in.rb 내 예제 코드인가?

puts @log_in_page.error_message 
    puts @log_in_page.get_error_message 

도와 주실 수 있습니까?

감사합니다.

+0

(2) 문제를 재현하는 데 필요한 최소한의 코드 만 간소화 할 수 있다면 (예 : 해체 방법이 적절하지 않은 경우). 더 직접적으로 문제를 제기하고 재현하는 것이 쉬울수록 추측하거나 가정하지 않고 대답을하는 것이 더 쉬워집니다. –

+0

안녕하세요 저스틴, 죄송합니다. 예제를 단순화했습니다. 그래도 이해가되지 않으면 알려주세요. – nzsquall

+0

스타일을 포함하여 오류 메시지의 HTML을 공유 할 수 있습니까? 텍스트가 없다는 것을 감안할 때 (출력이 없다는 것을 의미한다고 가정 할 때) 요소의 텍스트가 표시되지 않을 가능성이 높습니다 (타이밍 문제 또는 스타일 문제 일 수 있음). –

답변

2

내 생각 엔 자바 스크립트를 통해 표시되는 오류 메시지로 인해 타이밍 문제가있는 것 같습니다. 오류 메시지 요소는 항상 페이지의 html에 있지만 로그인에 실패하면 오류 메시지 요소의 스타일이 변경 될 수 있습니다.

페이지 객체 (또는 watir) 요소가 텍스트를 반환하면 표시되는 텍스트 만 포함됩니다. 따라서 오류 메시지가 아직 표시되지 않으면 텍스트가 표시되지 않습니다. 요소를 확인하기 위해 대기

시도는 사용자가 볼 수 :

def get_error_message 
    error_message_element.when_present.text 
end 

when_present가 사용자에게 표시되기 위해 요소 5 초 정도 기다린 후 텍스트를 반환합니다.

업데이트 - 여러 h3s은 : 실제 문제는 그 클래스가 여러 H3 요소가 있다는처럼

것 같습니다. Watir은 항상 첫 번째 일치 항목을 반환하며이 경우 쿠키 오류 제목입니다. 그것이 표시되지 않는 것을 감안할 때, 빈 텍스트를 얻습니다.

해결책은 검색 범위를 줄여서 첫 번째 h3이 원하는 것입니다. 이것은 오류 메시지 목록을보고 만 수행 할 수 있습니다. 다음과 같이 페이지 객체를 정의합니다. h3 요소가 목록의 유일한 h3 요소이기 때문에 h3 요소의 클래스를 지정할 필요가 없습니다.

class LogIn 
    include PageObject 

    div(:error_message_list, :id => 'errorMessageList') 
    h3(:error_message){ error_message_list_element.h3_element } 
end 

이 다음 오른쪽 H3 요소를 찾을 수 :

browser = Watir::Browser.new 
browser.goto 'https://www.bnz.co.nz/ib4b/app/login' 
browser.button(:text => 'Login').click 

page = LogIn.new(browser) 
page.error_message 
#=> "There were 3 errors on the page." 
당신이 (1) (예를 들어 HTML) 충분한 페이지의 코드를 줄 수있는 문제 나 실제 페이지에 대한 링크를 재현하는 경우 도움이 될
+0

안녕 저스틴.나는 그것을 바꿨고 여전히 오류로 달렸다 "==================================== ======================= 오류 : test_failed_log_in (TestLogIn) Watir :: Wait :: TimeoutError : 5 초 후에 시간 초과되었습니다. {: class => "no-margin white-text", : tag_name => "h3"} 현재 상태가됩니다. " – nzsquall

+0

질문에" 여기에 "아직도 실수로 달렸다"고합니다. 원래 질문에서 오류가 있거나 텍스트가 표시되지 않는 경우 명확하게 설명해 주시겠습니까? –

+0

이전에 mothod가 일 때 def get_error_message self.error_message end 출력을 반환하지 않습니다. 이 데프 get_error_message 경우 error_message_element.when_present.text 이 error_message_element 5 초 후에 존재하는 것이이이 요소를 전혀 찾을 수없는 어떤 이유로, 기다릴 수 있기 때문에이 오류로 실행 끝 . – nzsquall

관련 문제