【问题标题】:How to enter text into a react-selectize-control using Watir如何使用 Watir 将文本输入到 react-selectize-control
【发布时间】:2023-03-16 19:28:01
【问题描述】:

我在页面上有以下代码:

 <div class="col-md-5 col-lg-3">
  <div class="react-selectize bootstrap3 root-node simple-select open">
   <div class="react-selectize-control">
    <div class="react-selectize-placeholder">testing!</div>
     <div class="react-selectize-search-field-and-selected-values">
      <input class="resizable-input" style="width: 4px;" type="input">

如果我物理选择输入字段,然后使用 watir-classic 运行以下命令:

BROWSER.div(:class => 'col-md-5 col-lg-3')
       .div(:class => 'react-selectize-search-field-and-selected-values')
       .text_field(:class => 'resizable-input')
       .send_keys('Magg')

它将在字段中输入Magg,但如果我不手动选择字段,我似乎无法输入文本。

我尝试了以下方法:

BROWSER.div(:class => 'col-md-5 col-lg-3')
       .div(:class => 'react-selectize-search-field-and-selected-values')
       .text_field(:class => 'resizable-input')

与

.set('Magg')
.fire_event('onfocus')
.fire_event('mousedown')
.fire_event('mouseup')

使用

.parent.text_field(:class => 'resizable-input')
.parent.input(:class => 'resizable-input').set('Magg')
.input(:class => 'resizable-input').set('Magg')
.input(:class => 'resizable-input').send_keys('Magg')

我一直在与使用控件的开发人员合作,但我们都无法弄清楚如何赋予控件焦点,以便 send_keys 在不手动选择控件的情况下工作。任何指导将不胜感激。

【问题讨论】:

  • 必须点击输入才能激活吗?像b.input(class: "resizable-input").set "foo" 这样简单的东西真的有用吗? (如果没有,如果有的话,你会得到什么错误)。是否需要指定外部容器来选择输入?例如puts b.inputs(class: "resizable-input").size 是否返回 1 以外的值?
  • 谢谢@JustinKo,您使用的是Watir WebDriver 还是Classic?我猜我可能必须弄清楚如何让 WebDriver 工作,然后再试一次。
  • 感谢 @JustinKo,抱歉,我查看了您的链接,但我不是专业程序员,也没有找到对我有意义的解决方案。
  • 感谢@ChuckvanderLinden,通过识别控件的前一个 div,我能够点击我需要的那个。
  • 感谢所有反馈的人。我花时间让 WebDriver 工作,并成功让 send_keys 输入文本。现在是我的下一个路障:)

标签: watir watir-classic


【解决方案1】:

首先 - 强制警告 Watir Classic 已弃用,您应该使用 Watir WebDriver。 (可能会解决此问题)

第二 - 从技术上讲:div(:class =&gt; 'col-md-5 col-lg-3') 应该是 div(:css =&gt; '.col-md-5.col-lg-3'),因为类应该是单数的。

你试过在element.set之前只做element.fire_event(:click)吗?

【讨论】:

  • 感谢您的反馈@titusfortner。我在让 WebDriver 工作时遇到了问题,所以我只是使用经典来向我的同事展示 Watir 的奇迹以及它可以做什么。当我无法在字段中输入文本时,我的脸有点平淡 :( 是的,对不起,我应该将 .fire_event('click') 作为我们尝试的选项之一,但唉,它也不起作用.
  • 所以我现在让 WebDriver 工作了,我的同事对我的工作印象深刻得多 :)
【解决方案2】:

请注意,您的 HTML 中输入标记的“类型”值无效。根据W3.org,“输入”的类型不是输入标签的有效类型选择。

这可能是导致您期望工作的方法(例如.set)失败的原因。这也意味着返回更具体的输入子类型(例如.text_field)的所有 watir 方法都无法选择该标签。

Watir根据输入标签的具体子类型定义了具体的输入相关方法(如.set、.unset),并具有选择这些具体输入类型的方法(如.button)。通常你会使用它的子类型的方法来选择一个输入标签,但是因为那个值是无效的,在这种情况下这不是一个选项,你不得不使用.input。但正如我们刚刚讨论的,watir 中的输入对象没有定义像 .set 这样的方法。所以你唯一的后备是使用 .sendkeys 将击键发送到元素。

如果是我,我会在那个 HTML 上写一个错误,它没有根据 W3 规范为“类型”使用正确的值。

将 HTML 修复为有效可能会使其与 Watir 或任何其他自动化工具(尤其是基于 webdriver 的自动化工具)一起工作得更好。

【讨论】:

  • 很好的建议,谢谢@ChuckvanderLinden。我还会要求开发人员将 id 添加到控件中,这样我就不需要引用它们周围的 div 来确保我得到正确的 :)
猜你喜欢
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多