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

Ruby Watir syntax for setting a text_field with no id and odd parameters

本文关键字:text field Ruby 语法 Watir 参数 设置 id 用于      更新时间:2023-09-26

我试图在一个不再有id的网页上设置text_field和文本区域。我猜这个网站是在试图避免自动化。input和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解决方案,我可以使用?如果需要进一步的信息,请告诉我。

Using 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的值,以查看您正在操作的文本字段。我想你可以做一个循环,但你可能会得到一个错误。一直调用test直到找到你想要的。

这些元素看起来确实有一些描述性的属性。文本字段有一个描述该字段的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

我认为这种方法更能表达你的代码在做什么。此外,它可以更健壮,因为它不受字段重新排序或添加/删除其他字段的影响。

我一直在通过xpath识别这些ng-data对象,主要是在没有更具体的方法来识别它们的情况下。犹斯丁关于稳健的方法是正确的;找到一种不需要重构的方法。下面是我要写的:

browser.text_field(xpath: '//input[@data-ng-model="message.Subject"]').set("Hello")
browser.button(:text => 'Send Now').click

我不喜欢使用太多xpath,除非它能保证我以唯一的方式在页面上查找对象。