如何为选择定义自定义定位策略

brbrr

我正在寻找一种适当的方法来为Gwt应用程序中的select标签重新定义/扩展定位策略。从html片段中,您可以看到该select标签不可见。因此,要从列表中选择选项,我需要单击button标记,然后li从下拉列表中选择所需的标记。

<div class="form-group">
  <select class="bootstrap-select form-control" style="display: none; locator='gender">
    <div class="btn-group">
    <button class="dropdown-toggle" type="button" title="Male">
      <div class="dropdown-menu open">
        <ul class="dropdown-menu inner selectpicker" role="menu">
          <li data-original-index="1"> (contains a>span with option text)
            .....more options
      </ul>
    </div>
  </div>
</div>

我看到了肮脏的解决方案:在BasePage类中实现方法。这种方法不错的page_object糖(选项,获取值等):

def set_nationality(country, nationality='Nationality')
  select = button_element(xpath: "//button[@title='#{nationality}']")
  select.click
  option = span_element(xpath: "//span[.='#{country}']")
  option.when_visible
  option.click
end

还有其他更清晰的方法吗?使用`PageObject :: Widgets可能吗?

UPD:这是我期望得到的:

def bool_list(name, identifier={:index => 0}, &block)
  define_method("#{name}_btn_element") do
    platform.send('button_for', identifier.clone + "//button")
  end
  define_method("#{name}?") do
    platform.send('button_for', identifier.clone + "//button").exists?
  end
  define_method(name) do
    return platform.select_list_value_for identifier.clone + '/select' unless block_given?
    self.send("#{name}_element").value
  end
  define_method("#{name}=") do |value|
    return platform.select_list_value_set(identifier.clone + '/select', value) unless block_given?
    self.send("#{name}_element").select(value)
  end
  define_method("#{name}_options") do
    element = self.send("#{name}_element")
    (element && element.options) ? element.options.collect(&:text) : []
  end
end 
贾斯汀·柯(Justin Ko)

选择列表似乎具有最多的标识属性,因此我将其用作小部件的基本元素。所有其他元素,即按钮和列表项,都需要相对于选择列表进行定位。在这种情况下,它们都共享相同的div.form-group祖先。

小部件可以定义为:

class BoolList < PageObject::Elements::SelectList
  def select(value)
    dropdown_toggle_element.click
    option = span_element(xpath: "./..//span[.='#{value}']")
    option.when_visible
    option.click
  end

  def dropdown_toggle_element
    button_element(xpath: './../div/button')
  end

  def self.accessor_methods(widget, name)
    widget.send('define_method', "#{name}_btn_element") do
      self.send("#{name}_element").dropdown_toggle_element
    end

    widget.send('define_method', "#{name}?") do
      self.send("#{name}_btn_element").exists?
    end

    widget.send('define_method', name) do
      self.send("#{name}_element").value
    end

    widget.send('define_method', "#{name}=") do |value|
      self.send("#{name}_element").select(value)
    end

    widget.send('define_method', "#{name}_options") do
      # Since the element is not displayed, we need to check the inner HTML
      element = self.send("#{name}_element")
      (element && element.options) ? element.options.map { |o| o.element.inner_html } : []
    end
  end
end
PageObject.register_widget :bool_list, BoolList, :select

请注意,所有定位器均与选择列表有关。另外,请注意,我们使用accessor_methods来向页面对象添加额外的方法。

然后,页面对象将使用bool_listaccessor方法。请注意,标识符是用于定位select元素的,我们说这将是小部件的基本元素。

class MyPage
  include PageObject

  bool_list(:gender, title: 'Gender')
  bool_list(:nationality, title: 'Nationality')
end

该页面现在将能够调用以下方法:

page.gender_btn_element.click
page.gender_btn_element.exists?
page.gender
page.gender = 'Female'
page.gender_options

page.nationality_btn_element.click
page.nationality_btn_element.exists?
page.nationality
page.nationality = 'Barbados'
page.nationality_options

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为自定义属性类型选择创建自定义源模型?

来自分类Dev

自定义定位

来自分类Dev

如何为gvim自定义solarize?

来自分类Dev

自定义授权策略

来自分类Dev

如何为事件定义自定义eventargs?

来自分类Dev

如何为TextView定义自定义BindingMethod?

来自分类Dev

如何为自定义输入迭代器定义指针

来自分类Dev

如何为Nginx食谱定义自定义属性?

来自分类Dev

pkexec-编写pkexec策略时如何为auth_admin_keep设置自定义超时

来自分类Dev

如何为订单及其项目编写自定义MySQL选择查询

来自分类Dev

如何为我的自定义“开放图谱”故事选择要发布的灵活句子结构?

来自分类Dev

angular-ui-选择如何为选项创建自定义对象

来自分类Dev

如何为订单及其项目编写自定义MySQL选择查询

来自分类Dev

如何为Azure WebJobs选择自定义节点版本

来自分类Dev

如何自定义箭头进行选择?

来自分类Dev

如何重置ADB2C自定义策略自定义HTML缓存?

来自分类Dev

git:如何添加自定义合并策略?

来自分类Dev

如何编写自定义事件循环策略?

来自分类Dev

如何查看由自定义策略创建的用户的数据?

来自分类Dev

如何编写自定义事件循环策略?

来自分类Dev

如何在Delphi中关闭自定义定位的PopupMenu?

来自分类Dev

如何缩放/定位节点Swift SpriteKit?自定义视图?

来自分类Dev

如何为网址编写自定义正则表达式(自定义网址)

来自分类Dev

如何为网址编写自定义正则表达式(自定义网址)

来自分类Dev

JPA 2.1自定义命名策略?

来自分类Dev

创建自定义合并策略

来自分类Dev

自定义资源cloudformation的堆栈策略

来自分类Dev

JPA 2.1自定义命名策略?

来自分类Dev

Azure 自定义扩展策略

Related 相关文章

热门标签

归档