Ruby Watir语法,用于设置没有id和奇数参数的text_field

时间:2014-07-17 21:46:27

标签: javascript jquery html ruby watir

我正在尝试在不再具有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解决方法吗?如果需要任何进一步的信息,请告知我们。

3 个答案:

答案 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,除非它保证了我在页面上找到对象的独特方式。