2016-08-17 1 views
0

Я использую rspec-watir для автоматизации некоторых тестов, и недавно возникла странная проблема.
Фон: У меня есть метод под названием select_cards(cards), который выполняет поиск, выбирает 16 (особенно 16) карт, а затем добавляет их в раздел ... Недавно я изменил свою конфигурацию, чтобы окно экрана начиналось с 1920x1080 (@browser.window.resize_to(1920, 1080))
Watir-webdriver; изменение поведения метода из-за изменения размера окна?

Поскольку делать это всякий раз, когда я бегу select_cards(cards) он выбирает только 12 карт вместо 16. Тем не менее, когда я закомментировать метод window.resize_to, она успешно захватывает все 16

Любая идея, почему изменение размеров окна будет вызывать изменение поведения? Любые мысли о том, как я могу это решить?

Фрагмент кода для того, как select_cards(cards) работ:

def select_cards(cards) 
    @browser.button(:class, 'add-cards').click 
    # this runs a generic search to return all cards 
    search_modal = @browser.div(:class, 'quick-search')  
    search_modal.button(:class, 'test-quick-search').click 

    results = @browser.div(:class, 'search-results') 

    # This #take() passes in how many cards to click on--as stated; 16 
    cards = results.divs(:class, 'card selectable') 
    cards.take(cards).each do |assets| 
     assets.click 
    end 
end 
+2

Если вы не изменяете размер браузера, это окно больше или меньше, чем 1920x1080? Имеет ли ваше приложение какой-либо отзывчивый дизайн (т. Е. Изменения макета в зависимости от размера окна)? –

+0

@ JustinKo, обычное окно браузера - _smaller_, чем 1920x1080, и да, есть некоторый отзывчивый дизайн - когда окно сокращается или расширяется, количество карт на строку изменяется (то есть, в обычном оконном окне браузера работает 4, 1920x1080 => 6) – kmancusi

+0

Интересно, я бы ожидал, что маленькое окно станет проблемой. Совместное использование способов поиска элементов поможет. Кроме того, проверка HTML в двух разных размерах браузера может предоставить полезную информацию. –

ответ

0

Это только предположение. Но вполне возможно, что элементы не существуют, если они не прокручиваются в поле зрения (или, может быть, есть и другие Домс)

Try прокручивать страницу (вместо изменения размера), как:

browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
0

Я также сталкиваются с подобной проблемой, когда элементы не находятся в режиме просмотра прокрутки. В этих ситуациях я использовал «watir-nokogiri» gem для анализа html, а затем захватил все элементы и выполнил действие, если это их уникальный идентификатор для захваченных элементов. В вашей ситуации я бы сделал что-то вроде этого:

def select_cards(cards) 
    @browser.button(:class, 'add-cards').click 
    search_modal = @browser.div(:class, 'quick-search')  
    search_modal.button(:class, 'test-quick-search').click 

    # Parsing HTML into a variable and searching for the results inside the variable 
    doc = WatirNokogiri::Document.new(@browser.html) 
    results = doc.div(:class, 'search-results') 

    cards = results.divs(:class, 'card selectable') 

    cards.take(cards).each do |assets| 
    # Assuming that id is the unique identifier for the assets 
    @browser.element(:id => "#{assets.id}").click 
    end 
end 

Примечание: это произведение, вокруг которого я использовал, чтобы иметь дело с этими ситуациями, и она работает только тогда, когда я могу взаимодействовать с браузером, используя захваченное HTML. Если у вас нет идентификатора, вы можете попробовать с индексом или другим способом щелкнуть его. Используя эту библиотеку, вы сможете получать только все элементы, даже если они не находятся в режиме прокрутки.

0

Как ни странно, я нашел то, что, кажется, работает для меня:
После использования этого Locating elements without a specific class name, так что я мог бы использовать другой метод, я изменил свой цикл с помощью assets.fire_event ("onclick")
Я тестировал через код горсть раз и у меня нет проблем с выбором всех элементов

Смежные вопросы