2016-04-04 46 views
0

我正在學習使用紅寶石和頁面對象模型的selenium web驅動程序。我的測試代碼如下:Ruby Selenium/Page對象模型 - 啓動瀏覽器

當我運行測試時,我得到一個錯誤,無法找到元素,這是由於頁面加載,但沒有重定向到正確的鏈接。通常我會使用driver.gets,但不能讓它與頁面對象模型一起工作?

require 'rubygems' 
require 'selenium-webdriver' 
require 'page-object' 




class ContactDemoQa 
    include PageObject 



text_field(:name, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(2) > span > input') 
text_field(:email, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(3) > span > input') 
text_field(:subject, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(4) > span > input') 
text_area(:messages, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(5) > span > textarea') 
    button(:send, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(6) > input') 


    def contact_method(name, email, subject, message) 

    self.name = name 
    self.email = email 
    self.subject = subject 
    self.message = message 
    send 
    end 
    browser = 'http://demoqa.com/contact/' 
    browser = Selenium::WebDriver.for :firefox 
    contact_demo_qa = ContactDemoQa.new(browser) 

    contact_demo_qa.contact_method 'rob', '[email protected]', 'test', 'Yellow' 

end 

隨着頁面的對象模型,你的意思是有頁面對象和在一個類的方法,然後在另一個類中使用下面的代碼調用該方法?

browser = 'http://demoqa.com/contact/' 
    browser = Selenium::WebDriver.for :firefox 
    contact_demo_qa = ContactDemoQa.new(browser) 

    contact_demo_qa.contact_method 'rob', '[email protected]', 'test', 'Yellow' 
+0

你是問,如果這些最後4行應當在'ContactDemoQa'類或不?還是你問在哪裏調用'driver.get'? –

+0

我在問最後4行是否應該在另一個班上。另外當我運行這個類的時候會發生,因爲它沒有指向頁面對象的正確URL。我錯過了URL,但我不知道如何使用頁面對象模型將它指向正確的URL。通常我在java中使用driver.gets(http)@JustinKo – Speedychuck

回答

1

你就錯了,該頁面對象模型意味着一切都屬於頁面,這意味着,該網頁上執行應位於該PageObject類中的URL,定位器和方法,一個PageObject類意味着您的用戶界面中可見的頁面。

在你的實現中,問題在於你把不屬於頁面的東西放在頁面內(最後4行),它應該單獨運行。然後聯繫頁面應該是這樣的:

#contact_page.rb 

require 'page-object' 

class ContactPage 
    include PageObject 

    text_field(:name, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(2) > span > input') 
    text_field(:email, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(3) > span > input') 
    text_field(:subject, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(4) > span > input') 
    text_area(:messages, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(5) > span > textarea') 
    button(:send, :css => '#wpcf7-f375-p28-o1 > form > p:nth-child(6) > input') 

    page_url 'http://demoqa.com/contact/' 

    def contact_method(name, email, subject, message) 
    self.name = name 
    self.email = email 
    self.subject = subject 
    self.message = message 
    send 
    end 
end 

的測試執行應該這樣定義:

#testdemo.rb 

require 'selenium-webdriver' 
require 'page-object/page_factory' 
require_relative 'contact_page.rb' 

include PageObject::PageFactory 

#--set up-- 
@browser = Selenium::WebDriver.for :firefox 
#---------- 

#test execution 
visit(ContactPage) 
on(ContactPage).contact_method('rob', '[email protected]', 'test', 'Yellow') 
+0

那麼這又有什麼意義呢,它是如何讓一個類中的對象和方法變得可靠,然後用測試演示類來調用它們。你有其他頁面對象的例子嗎? – Speedychuck