2014-02-11 2 views
1

동적으로 페이지 객체를 사용하고 싶습니다. 이런 식으로 뭔가 :send를 사용하여 페이지 객체의 옵션을 동적으로 선택하십시오.

text_field(:company_name_field, id: 'company_directory_name') 
select_list(:state_select, id: 'company_directory_workflow_state') 


def input_text_field (page_object) 
    sample_text = Faker::Lorem.paragraph 
    $text_array.push(sample_text) 
    wait_until{send("#{page_object}_field?")} 
    send("#{page_object}_field=", sample_text) 
end 

하지만, 대신 INPUT_FIELD의하는 select_index 객체를 사용하여 :

def input_select_list(page_object) 
    wait_until{send("#{page_object}_select?")} 
    x = rand(0..send("#{page_object}_select_element.options.length")) 
    send("#{page_object}_select_element.option(#{:index}, #{x})).select") 
end 

그러나이 나에게 정의되지 않은 방법 "의 오류를주고있다`state_select_element.option (인덱스 1) .select ' "

어떻게이 작업을 수행 할 수 있습니까?

답변

1

send을 사용할 때 첫 번째 인수는 단일 메서드 여야합니다. sendstate_select_element.option(index, 1).select을 3 번의 메서드 호출로 분해하지 않습니다.

첫 번째 메서드 호출 인 state_select_element을 문자열에서 계산해야하므로 send을 사용하십시오. 나머지는 정상적으로 호출 할 수 있습니다. 당신의 방법에 이것을 적용하면 제공 :

def input_select_list(page_object) 
    wait_until{send("#{page_object}?")} 
    x = rand(0..send("#{page_object}_element").options.length) - 1 
    send("#{page_object}_element").option(:index, x).select 
end 

그러나, optionselect 방법은 감가 상각 경고를 줄 것이다. 오류를 막기 위해이 메서드를 다음과 같이 다시 작성합니다.

def input_select_list(page_object) 
    select = send("#{page_object}_element") 
    select.when_present 
    select.select(send("#{page_object}_options").sample) 
end 
+0

음 ... 작동하는 것 같습니다. – user3279376

관련 문제