【问题标题】:Watir-webdriver - Select a list display style: noneWatir-webdriver - 选择列表显示样式:无
【发布时间】:2014-06-25 21:03:21
【问题描述】:

大家好,我一直在努力寻找解决问题的方法,但找不到。

我需要从这个 html 代码中的第二个选择中选择一个值,即 name="update_status[5955483]" 的值,我不知道如何。

我的尝试没有成功。

      Watir:



 1-  browser.select_list(:name, "update_status[5955483]").select_value("A")

 2 - input_field = browser.div(:class => 'minict_wrapper orange')
 input_field.link(:name => 'update[5955483}]' ).click

 3 - browser.input( :value, "B").click 

没有任何效果,第一个在查找元素时给我错误,第三个只是单击第一个输入。

我已经搜索过,根据我的理解,我需要转到所需的 Select,然后单击上面的输入以使 UL 可见,然后从 UL 中选择值,只是不知道该怎么做.

任何帮助将不胜感激。

 HTML:

     <tbody class="filters">
    <tr>
    <td width="10%"> </td>
    <td width="20%">
    <td width="20%">
        <select id="status_filter" class="jscompleted" name="filter_status"   data-select-onchange="$(this.element).trigger('change');" data-select-minimalectify="orange" style="display: none;">
            <option value="all">All</option>
            <option value="a"> A </option>
            <option selected="selected" value="moderation"> B </option>
            <option value="c"> C </option>
            <option value="d"> D </option>
            <option value="e"> E </option>
            <option value="f"> F </option>
            <option value="g"> G </option>
        </select>
        <div class="minict_wrapper orange" data-minictfied="" data-minict-id="status_filter" data-minict-class="jswait">
        <input type="text" placeholder="B" value="B" data-minictfied="">
        <ul data-minictfied="" style="display: none;">

            <li class="minict_first" data-value="all">All</li>
            <li class="" data-value="a"> A </li>
            <li class="selected" data-value="moderation"> B </li>
            <li class="" data-value="c"> C </li>
            <li class="" data-value="d"> D </li>
            <li class="" data-value="e"> E </li>
            <li class="" data-value="f"> F </li>
            <li class="minict_last" data-value="g"> G </li>
            <li class="minict_empty" style="display: none;">No results match your keyword.</li>
        </ul>
        </div>
    </td>

    <td width="20%">
    <td width="20%">
    <td width="10%">
</tr>


<tr>
<tr>
</tbody>

<tbody>
<tr>
    <td>
    <td> MV Name </td>
    <td>
        <select class="jscompleted" name="update_status[5955483]" data-select-onchange="$(this.element).trigger('change');" data-select-minimalectify="orange" style="display: none;">
            <option value="a" > A </option>
            <option selected="selected" value="" > B </option>
            <option value="c" > C </option>
            <option value="d" > D </option>
            <option value="e" > E </option>
            <option value="f" > F </option>
            <option value="g" > G </option>
        </select>
        <div class="minict_wrapper orange" data-minictfied="" data-minict-class="jswait">
        <input type="text" placeholder="B" value="B" data-minictfied="">
        <ul data-minictfied="" style="display: none;">
            <li class="minict_first" data-value="a"> A </li>
            <li class="" data-value="c"> C </li>
            <li class="" data-value="d"> D </li>
            <li class="" data-value="e"> E </li>
            <li class="" data-value="f"> F </li>
            <li class="minict_last" data-value="g"> G </li>
            <li class="minict_empty" style="display: none;">No results match your keyword.</li>
        </ul>
        </div>
    </td>

【问题讨论】:

  • 作为用户,您将如何输入页面?根据 html,我会猜到您是某种自动完成控件 - 即您输入一个文本字段,该字段显示匹配结果列表,然后您从该列表中选择一些内容。您希望您的 Watir 代码模仿相同的操作。仅使用 html 很难重现您的问题并验证这些假设。您是否可以分享实际使页面工作的代码(可能是 jQuery)(即创建一个显示问题的独立页面)?

标签: javascript jquery html watir watir-webdriver


【解决方案1】:

是的。我正在测试的网站也有类似的问题。这似乎是最近网站设计的一个新趋势,因为显然单靠选择列表不能看起来像无序列表那样花哨。

在您单击显示它的东西后,编写与动态生成的 HTML 交互的过程方法有一种折磨人的方法,但它是非常丑陋的代码,我放弃了使用它来支持以下代码,我'为简单起见,已缩短:

@browser.execute_script(%{jQuery("select[#{attrib}|='#{value}']").show();})

此命令根据目标列表的标签属性(如 :id、:name、:title 等)在 UI 中公开实际的选择列表

一旦选择列表被该 jQuery 命令取消隐藏,您就可以正常与它进行交互了。

希望 Watir 的一位大师很快就会提出更好的解决方案,因为我认为这种页面设计在未来会变得越来越普遍。

【讨论】:

  • 假设用户可见列表没有触发任何必需的事件,我认为这是一个相当不错的方法。 passing a Watir element to the jQuery script 是您可能会发现有用的一个巧妙技巧。这允许您在通常的 Watir API 中定位选择列表,而不是编写 CSS 选择器。例如@browser.execute_script("$(arguments[0]).show();", @browser.select_list(:id =&gt; 'list'))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
相关资源
最近更新 更多