2014-11-03 5 views
0

요소 만 사용하여 PageObject 요소의 식별자를 가져올 수 있습니까? (cheezy pageobject gem)페이지 객체의 요소 이름 가져 오기

요소의 이름을 유지하는 요소의 특성이 있습니까? 이 경우 예를 들어

:

난 단지 요소가있는 경우
text_field(:name, :id => 'name') 

, 어떻게 내가 그 이름을 찾을 수 있습니까? :)

도움 주셔서 감사합니다.


편집 :

좋아, 그래서 여기 내가 뭘하려고 오전입니다 :

class AttributePage < PropertyPage 
    include PageObject 
    include DataMagic 

    page_url NavigationHelpers::get_path 'catalog-attributes' 


    # Header 
    textfield(:attribute_sets, :id =>'ext-1') # 1. 
    textfield(:global_attributes, :id => 'ext-2') # 2. 

end 

과를 :

을 나는 일부 요소 정의가 AttributePage라는 pageObject을 가지고 PageObject PropertyPage는 다음과 같습니다.

class PropertyPage 
    include PageObject 

    def get_search_filter_elements 
    element_methods = self.class.instance_methods(false).find_all{ |m| m =~ /_element$/ } 
    elements = element_methods.collect{ |m| self.send(m) } 
    return_array =[] 
    for x in 0...element_methods.size 
     return_array.append([element_methods[x].to_s.gsub('_element', ''), elements[x]]) 
    end 
    return return_array 
    end 

이 방법은, 내가

on_page(AttributePage).get_search_filter_elements 

전화 나는 PageObject :: 요소의 목록을 얻을. 나는이 작업을 수행 할 수있는 방법이

def fill_elements 
    elements = get_search_filter_elements 
    elements.each do |element| 
    # Now this doesn't work 
    element.text = read_from_some_file_for_element_name element.name 
    end 

이 : 내가하고 싶었던 무엇 는 다음과 같이 것 AttributePage.fill_elements 전화를했다? 참조

에 대한

+2

'name'은 무엇을 의미합니까? 당신은'태그'에 대해 이야기하고 있습니까 .. 명확하지 않습니다 .. –

+0

귀하의 질문은 관련이없는 구성 요소를 여기에 혼합합니다. "Element"는 일반적인 의미에서 항상 html의 요소를 나타냅니다. PO 보석의 Element Object는 'WatirWebDriver :: Element'또는 'SeleniumWebDriver :: Element'에 대한 일반적인 래퍼입니다. 이것을 명확히해야합니다. 마치 PageObject :: Element를 참조하는 것처럼 보이면 무엇을 묻고 있습니까? 이 예제에서 제공 한 메소드 이름은 무엇입니까? 답변 : text_field()에서 arg [0] : ': name'으로 제공 한 심볼 이름입니다. 이 메소드에 액세스하려면 페이지 객체의 컨텍스트에서 name_element()를 호출해야합니다. –

+0

도와 줘서 고마워, Jared. 내가 찾고있는 것은 "이름", PO 요소의 ID입니다. Element 객체에만 액세스 할 수 있습니다. 그리고 Selenium :: Webdriver :: Element 만 가지고 있다면 어떻게 할 수 있습니까? "element.name"메소드 또는 이와 유사한 것이 있습니까? 감사. – Tiago

답변

0

것은 내가 먼저 더 완전한 페이지 객체를 만들어 보자 (PO) 클래스는 '이름'

<input type="text" id="name" value="zzz" name="yyy"/> 

class MyPage 
    include PageObject 
    text_field(:name, :id => 'name') 
end 

myPage = MyPage.new 
p myPage.name_element #Output => PageObject::Elements::TextArea 
p myPage.name?  #Output => 'true' 
p myPage.name   #Output => 'zzz' 
myPage.name = 'bbb' #Sets value of text_field to 'bbb' 
p myPage.name   #Output => 'bbb' 

의 ID를 가진 텍스트 필드가있는 페이지에 일부 HTML을 가정 이 4 가지 방법은 모두 'text_field (: name, ...)'페이지 요소를 정의한 결과 동적으로 생성됩니다.

귀하의 질문은 모호 합니다만, 귀하가 알고 자하는 것이 있다고 생각합니다. 이 요소는 페이지 객체에 매핑됩니다. 어떻게 abo가 될까요? 그것의 이름을 얻는 ut는 html 이름을 의미합니까? 문제는 html 요소에 'name'속성이있는 경우에만 작동합니다. 위 예제처럼 name_element 객체를 사용하여 name에 액세스 할 수 있습니다.

p myPage.name_element.name #Output => 'yyy' 
+0

나는이 질문을 이미 편집하여 더 잘 이해할 수있었습니다 :) – Tiago

관련 문제