2011-12-30 28 views
1

我自動化一個網站,網頁上有一個由單選按鈕選擇的選項列表。選擇其中一個無線電時,會顯示一個文本字段和一個選擇列表。帶有Ruby的PageObject - 在文本字段中設置文本只能在主文件中使用

我創建了一個文件(test_contracting.rb),通過它我執行測試(ruby test_contracting.rb)和其他一些類來表示我的頁面。

在我的課ContractPage,我有以下元素聲明:

checkbox(:option_sub_domain, :id => "option_sub_domain") 
    text_field(:domain, :id => "domain_text") 
    select_list(:tld, :id => "domain_tld") 

我在ContractPage創建的設置域這樣的配置的方法:

def configure_domain(config={}) 
     check_option_sub_domain 
     domain = config[:domain] 
     tld = config[:tld] 
    end 

當我從test_contracting.rb調用configure_domain方法,它選擇單選按鈕,但它不填充值。這些參數正在進入正確的方法。我用「puts」檢查過它。即使我將參數更改爲像「bla」這樣的通用字符串,它也不起作用。令人討厭的一點是,如果在test_contracting.rb上調用完全相同的組件,它就可以工作。

my_page_instance = ContractPage.new(browser) 
my_page_instance.domain = "bla" 
my_page_instance.tld = ".com" 

我發現工作是什麼在configure_domain方法,具有如下功能:

domain_element.value = config[:domain] 
tld_element.send_keys config[:locaweb_domain] 

然後它的工作。

對我使用作爲參考PageObjects模塊的文檔可以在這裏找到:http://rubydoc.info/github/cheezy/page-object/master/PageObject/Accessors#select_list-instance_method

你們是否已經對爲什麼由pageobject產生的方法自動設置對象didnt價值的任何explation在這個範圍/上下文中工作?

順便說一句,一位朋友用Java試過同樣的事情,但也失敗了。

回答

2

我對這個Selenium和頁面對象的世界很新,但也許我最近的一個發現可能會幫助你。

我發現select_list字段的賦值方法只對我有用,一旦我開始在前面使用「self」。這是我用來在我的頁面對象代碼中訪問它的東西。例如,self.my_select_list =「我的選擇列表值」

另一個注意事項 - 你提到的send_keys解決方法很聰明,可能會做一些用途的伎倆,但在我的情況下,選擇列表值是可變的,可能有從相同的字母開始的幾個選項。

我希望這裏的東西對你有用。

UPDATE(3/12揚)

潛水進一步進入該頁面對象的實際Ruby代碼,我發現select_list中集也使用send_keys,所以實際上我仍然有同樣的限制,在這裏就像我直接使用send_keys解決方法所記錄的那樣。 嘆息這麼多學習,這麼短的時間!

3

在ruby中,所有equals方法(以=符號結尾的方法)都需要有一個接收者。讓我告訴你一些代碼,將證明爲什麼。下面是設置一個局部變量的值代碼:

domain = "blah" 

,並在這裏被調用域=方法的代碼:

domain = "blah" 

爲了紅寶石知道要調用方法而不是設置需要添加接收器的局部變量。只需將上述方法更改爲此,即可使用:

def configure_domain(config={}) 
    check_option_sub_domain 
    self.domain = config[:domain] 
    self.tld = config[:tld] 
end 
相關問題