0

我有分页页面。有几个带有命名链接的 list_item 元素。每个列表项都有一些属性,我想在找到具有所需链接名称的页面后使用这些属性。

  list_items(:app_thumbs) { |page| page.app_thumbs_list_element.list_item_elements }
  ######attributes#################
  link(:app_name_link, :class => /app-name/)
  list_item(:app_icon_link, :class => /app-icon/)
  div(:app_description, :class => /description/)
  div(:app_actions, :class => 'action')
  link(:add_to) { |page| page.app_actions_element.link_element(:text => 'Add to') }
  link(:remove_from) do |page|
    page.app_actions_element.link_element(:text => 'Remove from')
  end
  link(:launch) { |page| page.app_actions_element.link_element(:text => 'Launch') }
  link(:view_a_demo){ |page| page.app_actions_element.link_element(:text => 'View') }
  link(:request_app){ |page| page.app_actions_element.link_element(:text => 'Request') }

但据我所知,我不能这样写:

  def the_app_thumb_find(name)
    find_page_with_app name
    app_thumbs_elements.each { |the_thumb| return the_thumb if the_thumb.app_name_link.text == name}
  end

然后使用例如:

@the_thumb = the_app_thumb_find(name)
@the_thumb.remove_from

因为我得到了对象 the_thumb 的 app_name_link 不存在的错误。

你能给点建议吗?我想为这些属性构建 DSL 并在之后使用它。但现在我只能使用:

the_thumb.link_element(:class => /app-name/).click

所以每次我想用这个属性进行操作时,我都必须使用 :class => /app-name/ 。

4

1 回答 1

0

抱歉,我无法分享确切的页面,但它就像:

                <ul id="bbb">

                    <li class="bbb">
                        <div style="padding: 0px; font-size: 15px;">
                            <a href="bbb">

                            <div class="bbb"></div>
                            </a> 
                            <a href="bbb" class="app-name clipped-text">
                                NAME WHICH I SEARCH
                            </a>
                            <div style="clear:both"></div>
                        </div>
                        <div class="description clipped-text">
                            Some Description
                        </div>
                        <div class="action">
                 <a href="bbb" class="soem class" id="333" onClick="DoSomething('NAME WHICH I SEARCH',4444,'URL');" >
                                    Add to 
                                </a>
                                ...
                    </li>
                    <li ...
                    </li>
            ...
            </ul>


        <div id="paging_panel">
<a ...page=1..." class="current">1</a>
<a onclick="...page=2..." href="...">2</a>                                                                                  ...
</div>

所以现在我找到了使用常量的方法(所有属性都更长,举个例子):

  APP_NAME_LINK = {:class => /name/} 
  APP_ICON_LINK = {:class => /icon/} 
  ADD_TO = {:text => 'Add to'} 
  REMOVE_FROM = {:text => 'Remove from'}

然后使用它:

 private

  attr_writer :latest_app_thumb
  attr_writer :latest_app_name
  attr_writer :remove_from
  attr_writer :add_to


def the_app_thumb_find(name)
    if @latest_app_thumb.nil? or @latest_app_name != name or not @latest_app_thumb.exist?
      find_page_with_app name
      app_thumbs_elements.each do |the_thumb|
        if the_thumb.link_element(APP_NAME_LINK).text == name
          @latest_app_name = name
          @latest_app_thumb = the_thumb
          @remove_from = @latest_app_thumb.link_element(REMOVE_FROM)
          @add_to = @latest_app_thumb.link_element(ADD_TO)
          return @latest_app_thumb
        end
      end
    end
  end

然后我可以像这样使用它

the_app_thumb_find(name)
@remove_from.click
@add_to.visible?
于 2013-08-15T14:42:03.093 回答