我正在尝试在不再具有ID的网页上设置text_field和文本区域。我猜这个网站正试图避免自动化。 input和textarea标签位于表单内。这是输入和textarea标签以及包含的内容。
<input class="uniform-input ng-pristine ng-invalid ng-invalid-required ng-valid-maxlength" type="text" data-invalid-chars="" data-max-length="50" required="" placeholder="Subject" data-float-label="true" data-ng-model="message.Subject"></input>
<textarea class="uniform-input ng-pristine ng-invalid ng-invalid-required ng-valid-maxlength" data-invalid-chars="" data-max-length="4000" required="" placeholder="Enter your message here" data-ng-keypress="view.error = false" data-float-label="true" data-ng-model="message.Body"></textarea>
在使用此按钮标签提交文本后,还需要单击一个按钮:
<button data-ng-if="!paymentInfo" type="button" class="button button-grey ng-scope" data-ng-click="ctrl.sendMessage()" data-ng-disabled="view.waiting" data-ng-class="{ 'button-disabled': view.waiting }">Send Now</button>
如果没有名字,我如何点击它?
如何使用Watir设置此功能的任何帮助将非常感激。如果Watir无法做到这一点,我可以使用可能的JS解决方法吗?如果需要任何进一步的信息,请告知我们。
答案 0 :(得分:0)
使用ruby gem watir
require 'watir-webdriver'
$browser = Watir::Browser.new
$browser.goto "yourwebsite.com"
$x = 0
def test
print "#{$x}"
begin
$browser.text_fields[$x].set "#{$x}"
rescue StandardError => e
puts " no text field found, try again.\n\n"
end
$x += 1
end
不断更改X的值以查看您正在操作的文本字段。我想你可以做一个循环,但你可能会得到一个错误。继续打电话测试,直到找到你要找的东西。
答案 1 :(得分:0)
元素看起来像是有一些描述性属性。文本字段具有描述该字段的data-ng-model
。同样,该按钮的文本可能是唯一的。
因此,我会这样做:
browser.text_field(:data_ng_model => 'message.Subject').set('subject text')
browser.textarea(:data_ng_model => 'message.Body').set('body text')
browser.button(:text => 'Send Now').click
我认为这种方法在代码的作用方面更具表现力。同样,它可以更加健壮,因为它不易被字段重新排序或添加/删除其他字段。
答案 2 :(得分:0)
我一直在通过xpath识别那些ng-data对象,主要是在没有更具体的方法来识别它们时。贾斯汀对于一种强大的方法是正确的;找到一种方法,不需要在路上重构。这就是我的意思:
browser.text_field(xpath: '//input[@data-ng-model="message.Subject"]').set("Hello")
browser.button(:text => 'Send Now').click
我不喜欢使用大量的xpath,除非它保证了我在页面上找到对象的独特方式。