2015-06-03 4 views
1

Попытка выяснить, как выбрать поле в форме с помощью textarea с указанием класса и идентификатора. К сожалению, у меня нет контроля над HTML, который создается, поскольку он является продуктом поставщика.Выберите textarea, используя класс и ID с Watir-WebDriver

Пример HTML:

<textarea class="text sr " id="arid_WIN_0_636875000" style="left: 402px; top: 0px; width: 261px; height: 21px;" rows="1" cols="20" wrap="off" arautoctt="400" arautocak="0" maxlen="255"></textarea> 

мне нужно использовать как идентификатор и класс, так как идентификатор используется в нескольких местах, а также в классе, однако, я обнаружил, что сочетание этих двух является уникальным ,

Я пробовал делать:

z = textarea(:class => "text sr ", :id => "arid_WIN_0_636875000") 

Это вернулся с:

=> #<Watir::TextArea:0x272de17c located=false sel 
>"arid_WIN_0_636875000", :tag_name=>"textarea"}> 

Пробовал установить его и вернулся с:

Watir::Exception::UnknownObjectException: unable to locate element, using {:class=>"text sr ", :id=>"arid_WIN_0_636875000", :tag_name=>"textarea"} 
from C:/Ruby21/lib/ruby/gems/2.1.0/gems/watir-webdriver-0.7.0/lib/watir-webdriver/elements/element.rb:507:in `assert_exists' 
from C:/Ruby21/lib/ruby/gems/2.1.0/gems/watir-webdriver-0.7.0/lib/watir-webdriver/user_editable.rb:32:in `clear' 
from C:/Ruby21/lib/ruby/gems/2.1.0/gems/watir-webdriver-0.7.0/lib/watir-webdriver/user_editable.rb:11:in `set' 
from (irb):21:in `block in irb_binding' 
from C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.45.0/lib/selenium/webdriver/common/target_locator.rb:50:in `window' 
from C:/Ruby21/lib/ruby/gems/2.1.0/gems/watir-webdriver-0.7.0/lib/watir-webdriver/window.rb:193:in `use' 
from (irb):20 
from C:/Ruby21/bin/irb:11:in `<main>' 

Это то, что HTML является для расчета:

<div class="DIVPopup shadow " id="popup_0" style="left: 495px; top: 161.5px; width: 930px; height: 673px; overflow: hidden; visibility: inherit; z-index: 100004;" arwindowid="0"><table class="DIVPopup ResizablePopup" id="DivTable" cellspacing="0" cellpadding="0"><tbody><tr class="DIVPopupTitleBar DIVDraggable"><td class="topleft">&nbsp;</td><td align="left" class="center" id="title_0" nowrap=""><div class="title">Name of form is here&nbsp;&nbsp;&nbsp;</div><button title="Close" class="Close right" id="ardivpcl" onclick="var target=FindClickedPopup('0', event); if(target){ target.OnCancel();target.stopBubbling(event);return false;}" type="button"></button></td><td class="topright">&nbsp;</td></tr><tr><td class="DIVPopupBodyNoBorder DIVPopupBodyBorder" colspan="3"><iframe id="1433419427651P" src="/arsys/forms/vmpit-ermdy006/NameOfFormIsHere/Administrator/?cacheid=fa90df9&amp;format=html" frameborder="0" style="width: 100%; height: 652px;"></iframe></td></tr></tbody></table><b class="rndfooter" style="background-color: rgb(255, 255, 255);"><b class="rnd1" style="background-color: rgb(255, 255, 255);"></b><b class="rnd2" style="background-color: rgb(255, 255, 255);"></b><b class="rnd3"></b></b><div class="ResizeHandle right" id="handle_0"></div></div> 
+0

ID должен быть уникальным. Поскольку вы указываете, что он не уникален, у вас есть неверный HTML. http://www.w3.org/TR/html-markup/global-attributes.html#common.attrs.id. По крайней мере, вам нужно подать команду своему поставщику, чтобы они давали вам плохой HTML. –

+0

Локатор работает для меня (когда опечатки фиксированы). Вы уверены, что проблема заключается в самом локаторе? Существует ряд причин, по которым Watir может не найти элемент, наиболее распространенным из которых является элемент в кадре. По другим причинам - [см. Мой блог] (https://jkotests.wordpress.com/unable-to-locate-element/) –

+0

Я думал о том, чтобы довести его до продавца, но даже если они решат изменить это, что я очень сомневаюсь в том, что они это сделают, я долго не воспользуюсь этим решением. Я очень сомневаюсь, что они это сделают, хотя это будет большой переписывание на их конце. Да, локатор 100% не работает для меня. Спасибо за блог, теперь посмотрим на это. Одна вещь, которую я забыл упомянуть в OP, заключается в том, что html находится внутри всплывающего окна/диалогового окна. Еще раз из-за того, как BMC написали свой HTML-код для этого, боль даже попала внутрь этого всплывающего окна. Я прибегал к использованию windows.last.use do – hockeybpr25

ответ

1

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

browser.div(:id => "popup_0") 

То есть, я не вижу в нем текстовое поле, что означает, что, скорее всего, в элементе IFrame. Iframes должны явно сообщить Ватиру, что означает найти нужную вам текстовую область:

browser.div(:id => "popup_0").iframe.textarea(:class => "text sr ", :id => "arid_WIN_0_636875000") 
+0

Да, ты прав. Я понял, что раньше он был в iframe и пытался выяснить, как получить к нему доступ. Это работает. – hockeybpr25

0

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

get_a_better_name = textarea(class: "text sr ", id: "arid_WIN_0_636875000") 

наконечник - с помощью кода линта как rubocop (https://github.com/bbatsov/rubocop) может помочь поймать эти ошибки.

+0

Да, это была просто опечатка с моей стороны.Все, что я нашел в Интернете для этого, - это использовать хэш-дро. Теперь я изменю код. – hockeybpr25

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