combobox - 无法使用 Selenium Webdriver :Ruby 识别 Combobox (Sproutcore) 并对其执行操作

标签 combobox selenium-webdriver sproutcore browser-automation

我有以下页面元素的 HTML。它是组合框 View 类型,列表是动态的

<div id="sender-combobox" class="sc-view scui-combobox-view sc-regular-size" style="left: 0px; right: 0px; top: 26px; height: 24px">
  <div id="sc14188" class="sc-view sc-button-view icon square sc-regular-size" style="right: 0px; width: 28px; top: 0px; height: 24px" role="button" alt="" title="">
    <span class="sc-button-inner" style="min-width:80px">
      <label class="sc-button-label ellipsis">
        <img class="caret" alt="" src="data:image/gif;base64,R0lGODlhAQABAJAAAP///wAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw==">
      </label>
    </span>
  </div>

  <label id="sc14190" class="sc-view sc-text-field-view oldWebKitFieldPadding sc-hint sc-regular-size" style="left: 0px; right: 28px; top: 0px; height: 22px">
    <span class="border"></span>
      <span class="padding">
        <input class="field" type="text" maxlength="5096" spellcheck="false" placeholder="Set Default Username" value="Set Default Username" name="sc14190">
      </span>
  </label>
</div>

现在我试图通过将元素声明为 select_list 并使用来自(http://www.rubydoc.info/github/cheezy/page-object/PageObject/Platforms/SeleniumWebDriver/SelectList#select-instance_method)的 Select 方法来从组合框中选择一个项目。

select_list(:default_sender, {xpath: "//div[@id='sender-combobox']/div/span/label/img"})

default_sender_element.Select('User1')

我收到一条错误消息,指出没有 Select 方法。我无法弄清楚原因:是不是因为元素类型不是组合框,因此 Select 方法不起作用?

fyi..我在我的文件中包含了“selenium-webdriver”。

作为另一种方法,我将组合框声明为两个不同的项目(搜索框 + 按钮)并尝试使用 send_keys(value) 输入文本,搜索将给出结果。但是我无法点击结果。

我卡在这一步了。感谢任何帮助或指导。

最佳答案

问题是您(或 selenium)正试图像 HTML 控件一样对待 SproutCore 控件。 SC 存在于 JavaScript 中,在你和 HTML 之间有一个厚厚的 View 层。在SCUI组合框的例子中,根据here ,您将在 JavaScript View 对象 上调用 myView.showList(),而不是在 HTML 元素上。

由于 SproutCore 存在于 JavaScript 中,因此您很少会通过查看 HTML 来找到 View 对象,因为这被认为是非常骇人听闻的。但是,如果您有充分的理由(或没有其他选择),您可以通过其 ID 访问 View ,该 ID 与元素上的 ID 相同。您在上面包含的 HTML 表明 ComboBox 的 ID 是“sender-combobox”(这意味着它已使用 layerId 进行了自定义,这是一个坏主意);您可以在 SC.View.views['sender-combobox'] 找到该 View 。同样,这被认为是一个坏主意。

请注意,如果您自己运行代码,例如从控制台或任何其他非 SC 响应用户事件(如单击)的来源,那么您需要通过使用函数调用 SC.run 来触发运行循环。否则,SproutCore 的绑定(bind)和观察者可能无法跟上,或者在下一个用户事件之前可能会出现不可预测的行为。

总而言之,要弹出打开此 View 的下拉列表,您可以使用:

SC.run(function() { SC.View.views['sender-combobox'].showList(); });

(但不要忘记以其他方式访问 SC.View.views['sender-combobox'] 会更好)。

关于combobox - 无法使用 Selenium Webdriver :Ruby 识别 Combobox (Sproutcore) 并对其执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24517107/

相关文章:

c# - ComboBox 文本垂直居中对齐

C# 在清除/设置为 null 后重新填充字典

java - 我如何将字符串变量插入到java中的Sql语句中

java - 当按钮似乎是从 JavaScript 生成时,如何使用 Selenium 访问按钮

python - 我应该如何正确使用Selenium

javascript - 可访问性和所有这些 JavaScript 框架

sproutcore - SC.LabelView.design不可见

c# - 如何在 wpf 中动态更改组合框特定项目的颜色

java - 使用 JUnit 和 Selenium WebDriver 时浏览器未启动

javascript - SproutCore:在Buildfile中设置代理不起作用