0

Короткая версия: новые вкладки в Chrome запрещают использование старых вкладок, исправление означает, что открытые вкладки с PDF-файлами в них снова используются, прежде чем человек сможет исследовать PDF-файлы.Открытие новых вкладок в Chrome с использованием Watir вызывает проблемы с использованием открытых вкладок

Длинная версия: Первоначально он работал так:

  1. открыт в новом окне Chrome на главной странице приложения (вкладка # 1) 2. [сделать процесс А, а затем] нажмите кнопку и новая вкладка (вкладка №2) открывается с помощью PDF A.
  2. Вернитесь на вкладку # 1 [выполните процесс B, а затем] нажмите кнопку, и новая вкладка (вкладка № 3) открывается с помощью PDF B.
  3. Вернитесь на вкладку # 1 [выполните процесс C, а затем] нажмите кнопку, и откроется новая вкладка (вкладка №4) и загрузится документ документа Word.
  4. Вернитесь на вкладку № 1 [выполните процесс D, а затем] щелкните по кнопке, и откроется новая вкладка (вкладка №5) и загрузится документ документа D документа.

Все вкладки остаются открытыми и могут быть просмотрены PDF-файлы. Не идеальный, но работоспособный.

Но потом все изменилось. Я вытащил часто используемые материалы, поместил их в методы в другой файл, чтобы все различные тесты могли их использовать, что казалось хорошей идеей. Но это, похоже, вызвало проблемы с потерей внимания к исходному окну. (Я могу ошибаться) теперь я застрял:

  1. открытым новым окно Chrome на главную страницу приложения (вкладка # 1)
  2. [сделать процесс А, а затем] нажмите на кнопку, и новую вкладка (вкладка №2) открывается с помощью PDF A.
  3. Оставайтесь на вкладке №2 [выполните процесс B, а затем] нажмите кнопку, и новая вкладка (вкладка № 3) открывается с помощью PDF B. PDF A теперь потерян
  4. Оставайтесь на вкладке №3 [выполните процесс C, а затем] щелкните по кнопке, и откроется новая вкладка (вкладка №4) и загрузится документ документа Word. PDF B теперь потерян
  5. Оставайтесь во вкладке №4 [выполните процесс D, а затем] щелкните по кнопке, и откроется новая вкладка (вкладка №5) и загрузится документ документа D документа.

Это было вызвано использованием «b.windows.last.use» Так что я попытался с помощью «b.windows.first.use» Но это не удается, потому что фокус не возвращается на вкладку # 1 , и watir не может найти объект в модальном, который ему нужно щелкнуть. (в `assert_ok ': элемент не может быть нажат в точке (737.5, -373) (Selenium :: WebDriver :: Error :: UnknownError))

Насколько я могу судить, все было бы хорошо, если бы я мог выполните любое из следующих действий:

  1. получить PDF-файлы для загрузки. Я не могу. This page казался многообещающим, но код не работал, и я не мог его исправить.
  2. Получить варир, чтобы вернуться на первую страницу, «для реалций», и найти нужные ей кнопки
  3. возможно открыть новую вкладку для каждого раздела теста (я собираюсь изучить этот раздел, но Я не слишком надеюсь)

Любые идеи? Я обновил Watir и Ruby как в течение последних двух месяцев.Я использую Chrome на OSX. Переход к Windows или IE не является жизнеспособным вариантом.

Ниже приведена часть кода. Нет, я не программист в первую очередь.

Спасибо.

currenturl = "stackoverflow.placeholder.com/works"  

# print Inventory Report .PDF (document 1) 
b.goto currenturl 
b.div(:id, 'page').a(:text, 'Inventory Report').click 
sleep 1 
b.div(:id, 'printInventoryReportModal').a(:text, 'A4').click 
b.link(:id => "submitBTNprint-inventory-report").fire_event "onclick" 

# print General List .PDF (document 2) 
b.goto [main page URL] 
b.div(:id, 'page').a(:text, 'General List').click 
sleep 1 
b.div(:id, 'printGeneralInventoryListModal').a(:text, 'A4').click 
b.link(:id => "submitBTNprint-general-list").fire_event "onclick" 

# print General List .DOC (document 3) 
b.goto [main page URL]  
b.div(:id, 'page').a(:text, 'General List').click 
sleep 1 
b.div(:id, 'printGeneralInventoryListModal').a(:text, '.DOC').click 
b.div(:id, 'printGeneralInventoryListModal').a(:text, 'A4').click 
b.link(:id => "submitBTNprint-general-list").fire_event "onclick" 
+1

две вещи, это может помочь только уменьшить это вниз к одной из частей кода, который называет ваш общий помощник методы, а затем также включить код для этих методов. Во-вторых, я укажу, что для таких элементов, как Report Inventory Report, я никогда не вижу, чтобы он устанавливал или даже использовал «currenturl», но он передает эту переменную (ну, значение IN в переменной), чтобы использовать методы page_status и section_results –

+0

Без предоставления кода из вспомогательных методов очень сложно иметь полную картину, и, вероятно, вы получите нулевые ответы. Также для других открываемых вкладок существуют такие вещи, как полезные заголовки, которые могут быть использованы, чтобы позволить методам .window правильно находить нужную вкладку? Это менее бесполезно, чем использование .last и .first, чтобы найти вкладку, с которой вы хотите работать. –

+0

Chuck, Во-первых: спасибо за ввод. Проблема остается даже без общих вспомогательных методов, поэтому я удалил их из приведенного выше кода. Я добавил заполнитель для «currenturl» только для полноты. Что касается именования вкладок, я попытался использовать 'b.window (: title =>" tab_name "). Используйте do', но это тоже не помогло. Насколько я могу судить, он терпит неудачу, потому что браузер фактически не переключает фокус обратно на вкладку «первый/последний/заданный», а модальность, отображаемая на этой странице, недоступна без фокуса. –

ответ

0

Похоже, что функция browser.window работает не так, как вы ожидаете, или вы не используете ее должным образом. Поскольку ваш вопрос в настоящее время содержит очень мало примеров того, как вы пытаетесь изменить окна (вкладки), очень сложно сказать, что вы можете делать неправильно.

Для начала я хотел бы использовать IRB сделать некоторое исследование и поиск неисправностей

Получить в ЭСО, а затем использовать

require 'watir-webdriver' 
b = Watir::Browser.new :chrome 

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

Теперь попробуйте что-то подобное в IRB, чтобы увидеть, если вы можете получить его выплюнуть заголовки окон

b.windows.each {|window| puts window.title} 

Если названия отличаются друг от друга, вы должны иметь возможность использовать это, чтобы указать, какое окно вы хотите использовать. Если они не разные, вам нужно будет посмотреть другие атрибуты, чтобы узнать, есть ли простой способ определить, какое окно вы хотите. (Или, возможно, просто использовать: индекс)

0

Try ниже код,

сна (2)

@browser.driver.switch_to.window(@browser.driver.window_handles[put_your_index]) 
@browser.window(:title,"Please put your title here").use do 
end 
@browser.button.when_present.click 
  1. когда вы хотите хотите перейти в реальное окно, используйте такой же код, как указано выше, и соответственно изменить индекс окна.

Для примера, если индекс родительского окна 0, а затем индекс дочернего окна будет 1

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

  • Нет связанных вопросов^_^