2013-10-20 56 views
0

我有问题使用页面对象方法调用返回页面上的对象。页面对象上的方法调用不返回结果

这里是test_log_in.rb我的示例代码

... 
    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 

我的日志类定义如下:

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 

为什么会以下行返回任何输出?

puts @log_in_page.error_message 
    puts @log_in_page.get_error_message 

你能帮我吗?

谢谢。

+0

这将有助于如果你能(1)给予足够的页面的代码(例如HTML)来重现问题或实际页面的链接正在测试和(2)如果你能简化你的代码是重现问题的最低要求(例如拆解方法是不相关的)。问题越直接,问题越容易复制,越容易给出答案而不用猜测或做出假设。 –

+0

嗨贾斯汀,对不起,我简化了这个例子。请让我知道如果它仍然没有意义。 – nzsquall

+0

你能分享错误信息的HTML,包括样式吗?鉴于你没有得到任何文本(我认为你的意思是没有输出),这可能意味着元素的文本不可见(可能是时间问题或样式问题)。 –

回答

2

我的猜测是由于通过JavaScript显示错误消息而导致计时问题。错误消息元素可能总是在页面的html中,但是当登录失败时,错误消息元素的样式会更改为可见的。

当页面对象(或watir)元素返回其文本时,它只包含可见文本。所以如果错误信息还没有看到,你就没有文字。

尝试等待,以确保该元素是对用户可见:

def get_error_message 
    error_message_element.when_present.text 
end 

when_present将等待5秒钟元素,成为对用户可见,然后返回文本。

更新 - 多3H公司:

它看起来像实际的问题是,有是有阶级多个H3元素。 Watir总是返回第一个匹配,在这种情况下是cookie错误标题。鉴于它没有被显示,你会得到空白文本。

解决方法是减少搜索范围,以便您的第一个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." 
+0

嗨,贾斯汀。我改变了它,它仍然运行错误“======================================== ======================================= 错误:test_failed_log_in(TestLogIn) Watir :: Wait :: TimeoutError:5秒后超时,等待{:class =>“无边缘白色文本”,:tag_name =>“h3”}成为存在“ – nzsquall

+0

在您的问题中,您说”返回无输出“并在这里你说“仍然错误地运行”。你能否澄清一下,如果你在原始问题中看到错误或没有文字? –

+0

以前当方法是 def get_error_message self.error_message end 它不返回输出。 当它是 高清get_error_message error_message_element.when_present.text 结束 它跑了错误,因为它不能等待这个error_message_element〜5秒后出现,因为某些原因无法找到该元素在所有。 – nzsquall

相关问题