Попытка выяснить, как выбрать поле в форме с помощью 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"> </td><td align="left" class="center" id="title_0" nowrap=""><div class="title">Name of form is here </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"> </td></tr><tr><td class="DIVPopupBodyNoBorder DIVPopupBodyBorder" colspan="3"><iframe id="1433419427651P" src="/arsys/forms/vmpit-ermdy006/NameOfFormIsHere/Administrator/?cacheid=fa90df9&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>
ID должен быть уникальным. Поскольку вы указываете, что он не уникален, у вас есть неверный HTML. http://www.w3.org/TR/html-markup/global-attributes.html#common.attrs.id. По крайней мере, вам нужно подать команду своему поставщику, чтобы они давали вам плохой HTML. –
Локатор работает для меня (когда опечатки фиксированы). Вы уверены, что проблема заключается в самом локаторе? Существует ряд причин, по которым Watir может не найти элемент, наиболее распространенным из которых является элемент в кадре. По другим причинам - [см. Мой блог] (https://jkotests.wordpress.com/unable-to-locate-element/) –
Я думал о том, чтобы довести его до продавца, но даже если они решат изменить это, что я очень сомневаюсь в том, что они это сделают, я долго не воспользуюсь этим решением. Я очень сомневаюсь, что они это сделают, хотя это будет большой переписывание на их конце. Да, локатор 100% не работает для меня. Спасибо за блог, теперь посмотрим на это. Одна вещь, которую я забыл упомянуть в OP, заключается в том, что html находится внутри всплывающего окна/диалогового окна. Еще раз из-за того, как BMC написали свой HTML-код для этого, боль даже попала внутрь этого всплывающего окна. Я прибегал к использованию windows.last.use do – hockeybpr25