PageObject with Ruby - установить текст в текстовое поле, работает только в основном файле - PullRequest
1 голос
/ 30 декабря 2011

Я автоматизирую сайт, на котором есть страница со списком параметров, выбранных переключателем. При выборе одного из радиомодулей отображается текстовое поле и список выбора.

Я создал файл (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

Когда я вызываю метод configure_domain из test_contracting.rb, он выбирает переключатель, но не заполняет поле значениями. Параметры попадают в метод правильно. Я проверил это, используя «Put». Даже если я изменю параметры на обычную строку типа «бла», это не сработает. Раздражает то, что если на 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

Ребята, есть ли у вас какие-либо объяснения, почему метод, автоматически сгенерированный объектом страницы для установки значения объекта, не работал в этой области / контексте?

Кстати, друг попробовал то же самое с Java, но и это не удалось.

Ответы [ 2 ]

3 голосов
/ 12 мая 2012

В ruby ​​все методы равенства (методы, заканчивающиеся знаком =) должны иметь получателя. Позвольте мне показать вам код, который продемонстрирует почему. Вот код, который устанавливает значение локальной переменной:

domain = "blah"

и вот код, который вызывает метод domain =:

domain = "blah"

Чтобы ruby ​​знал, что вы вызываете метод вместо установки локальной переменной, вам нужно добавить получателя. Просто измените свой метод выше на это, и он будет работать:

def configure_domain(config={})
    check_option_sub_domain
    self.domain = config[:domain]
    self.tld = config[:tld]
end
2 голосов
/ 02 января 2012

Я довольно новичок в этом мире Selenium и объектов страниц, но, возможно, одно из моих недавних открытий может вам помочь.

Я обнаружил, что методы назначения для полей select_list сработали только после того, как я начал использовать «self» впереди. Это то, что я использовал для доступа к нему в коде объекта моей страницы. например, self.my_select_list = "значение моего списка выбора"

Еще одно примечание. Упомянутое вами обходное решение send_keys является умным и может помочь в ряде случаев, но в моем случае значения списка выбора являются переменными и могут иметь несколько параметров, начинающихся с одной и той же буквы.

Надеюсь, что-то здесь вам пригодится.

ОБНОВЛЕНИЕ (3/12 января)

Окунувшись дальше в настоящий код Ruby для объекта страницы, я обнаружил, что набор select_list также использует send_keys, поэтому в действительности у меня все еще есть то же ограничение, что и у того, что я заметил, используя обходной путь send_keys напрямую. вздох Так много учиться, так мало времени!

...