Есть ли альтернатива watir::ie.attach для watir-webdriver, поскольку присоединение не поддерживается на веб-драйвере

У меня есть веб-сайт, который отображается только в браузере с поддержкой Webkit (Google Chrome, Safari). Я использую Google Chrome, так как я на Windows 7.

Я использую Watir-WebDriver для автоматизации того же самого.

Проблема: когда я нажимаю кнопку в окне браузера, открывается другое окно, и содержимое после щелчка отображается в новом окне браузера. Мне нужен способ идентифицировать это новое окно браузера, чтобы продолжить тестирование. Я читал на разных форумах, но не получил определенного ответа/решения.

В: Существует ли альтернатива watir::ie.attach для watir-webdriver, поскольку в Watir-Webdriver не поддерживается подключение?

Образец кода:

require "rubygems"

require "watir-webdriver"


require "selenium-webdriver"

b = Watir::Browser.new(:chrome)

website = "http://xyz.com"

#a new browser is launched and the website is opened

b.goto(website)

#this opens a new browser window

b.link(:xpath,"/html/body/div/ul/li/a").click

#there is a button called "MAP" on the new browser window

b.link(:id,"btn_MAP")

#this gives an error, unknown link

person Raat    schedule 26.04.2011    source источник
comment
На самом деле это API для мобильных телефонов, в основном ориентированный на iPhone и Android, и мы пытаемся отобразить его в браузере, чтобы не ограничиваться тестированием на самом устройстве или на симуляторах.   -  person Raat    schedule 27.04.2011
comment
Ах, ладно... после того, как я разместил комментарий, я подумал, может ли это быть что-то вроде этого... Он не включает WinPhone, но это меньший сегмент, чем i и A на рынке мобильных устройств, поэтому я вижу эту логику.   -  person Chuck van der Linden    schedule 27.04.2011


Ответы (3)


Метод «окна» является альтернативой ie.attach. Webdriver может обрабатывать окно, открытое само по себе, с помощью метода окна.

b.link(:href,/server\/getPage/).click
b.window(:url,/server\/getPage/i).use do
  b.link(:id,"btn_MAP").click
end

вы можете обрабатывать всплывающие окна в блоке метода окна. Если вы хотите продолжать обрабатывать всплывающее окно, используйте его без блока, например window(:url,/foobar/).use

см. также: http://groups.google.com/group/watir-general/browse_thread/thread/232df221602d4cfb

person Yutaka Yamaguchi    schedule 27.04.2011
comment
Я получаю следующую ошибку с приведенным выше решением: //watir-webdriver-0.2.2/lib/watir-webdriver/elements/element.rb:241:in assert_exists': unable to locate element, using {:tag_name=>"a", :id=>"btn_MAP"} (Watir::Exception::UnknownObjectException) from //watir-webdriver-0.2.2/lib/watir-webdriver/elements/element.rb:69:in click' from ft_02.rb:29 from //selenium-webdriver- 0.1.4/lib/selenium/webdriver/common/target_locator.rb:37:in window' from //watir-webdriver-0.2.2/lib/watir-webdriver/window_switching.rb:99:in use' из ft_02.rb:28 - person Raat; 27.04.2011
comment
@raat Не могли бы вы прикрепить части исходного HTML-кода, которые вы хотите обработать, и URL-адрес всплывающего окна? - person Yutaka Yamaguchi; 27.04.2011
comment
Во-вторых, отредактируйте свой вопрос и добавьте новый код, который вы пытаетесь использовать для реализации подхода .window(how, what).use, чтобы кому-то было намного проще увидеть, где что-то может пойти не так. - person Chuck van der Linden; 27.04.2011
comment
HTML на (главной странице) на первом экране ‹!DOCTYPE html PUBLIC --//W3C//DTD XHTML 1.0 Strict//EN w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd› ‹html xmlns=w3.org/1999/xhtml xml:lang=en› ‹body id=content› ‹div id=hyperlocal› ‹ul class=menu› ‹li class=menuitem › ‹a target=_blank href=server/getPage/67/1354› ‹img class=image src =server/imagexyz==.png› ‹/a›‹/li›‹/ul› ‹/div›‹/тело›‹/html› - person Raat; 27.04.2011
comment
HTML на втором экране ‹html xmlns=w3.org/1999/xhtml xml:lang=en ›‹head› ‹link href=server/webkitad/css/template1.css? v=2.2.b1› ‹script type=text/javascript src=server/webkitad/js/build/xyz.js?v=2.2.c6› ‹/script› ‹/head› ‹body› ‹div id=wrapper style=width: 1680px; › ‹div id=header›...‹/div› ‹div id=scrollWrapper› ‹div id=scroller› ‹div id=content›...‹/div› ‹ul id=menu class=menu› ‹li class=odd› ‹a id=btn_MAP› ‹p class=buttonIcon MAP›‹/p› ‹span›Map‹/span› ‹/a›‹/li›‹/ul› ‹/div›‹/div›‹ /тело›‹/html› - person Raat; 27.04.2011
comment
Код Ruby/Watir-Webdriver: требуется rubygems требуется watir-webdriver требуется selenium-webdriver b = Watir::Browser.new(:chrome) веб-сайт = xyz?ver=2.x b.goto(веб-сайт) b.link(:xpath,/html/body/div/ul/li/a).click #щелчок по ссылке на Первый экран #Второй экран открывается с содержимым после клика. b.window(:url,server/getPage/67/1354).use do b .link(:id,btn_MAP).щелчок конец - person Raat; 27.04.2011
comment
@raat Я думаю, вам следует использовать регулярное выражение для значения атрибута url в методе окна. Я отредактировал свой ответ. попробуй :) - person Yutaka Yamaguchi; 28.04.2011
comment
@Yutaka: //watir-webdriver-0.2.2/lib/watir-webdriver/window_switching.rb:122:in locate': {:url=>/server\/getPage/} (Watir::Exception::NoMatchingWindowFoundException) from //watir-webdriver-0.2.2/lib/watir-webdriver/window_switching.rb:106:in handle' из //watir-webdriver-0.2.2/lib/watir-webdriver/window_switching.rb:99 :используется из ft_02.rb:29 - person Raat; 28.04.2011
comment
Хм.. Не могли бы вы сказать мне адрес второго экрана? Казалось, вы не можете найти окно с /server\getPage/. Я думаю, нам нужно игнорировать регистрозависимость для URL-адреса второго экрана. - person Yutaka Yamaguchi; 29.04.2011
comment
@raat Я отредактировал свой скрипт выше. Хотя я не уверен, что эта модификация действительно решит вашу проблему... попробуйте. - person Yutaka Yamaguchi; 30.04.2011
comment
есть ли какая-то причина, по которой вы пытаетесь сделать все это в ветке комментариев к ответу вместо того, чтобы редактировать исходный вопрос, где добавленный код может быть правильно отформатирован? это значительно облегчает людям чтение и попытку помочь вам - person Chuck van der Linden; 04.05.2011

@Yutaka: Большое спасибо за всю вашу помощь, которая заставила меня использовать что-то вроде следующего, и это сработало!

b.link(:xpath,"/html/body/div/ul/li/a").click

c = b.window(:url,"http:\/\/сервер\/getPage\/67\/1354")

с.использовать

b.link(:id,"btn_MAP").нажмите

person Raat    schedule 03.05.2011

Вы пытались сделать веб-сайт домашней страницей по умолчанию для браузера?

это может помешать вам сделать присоединение.

person Chuck van der Linden    schedule 26.04.2011