【问题标题】:How to locate element inside css footer如何在css页脚中定位元素
【发布时间】:2015-06-13 00:16:16
【问题描述】:

“ok”和“oops”页面上有 2 个文本,一个在 <footer> 下,另一个在 class=> 'meta' 下。 我想验证页脚文本,我正在使用

span(:alert){div_element(:class => 'application').div_element(:class => 'txt').span_element(:class => 'app-text')} 

但它使用元“类”文本“oops”进行验证,因为两者具有相同的 div 路径。 如何在特定页脚中找到 span 类“app-txt”?

<footer>
  <div class="application" style="opacity: 1;">
    <div class="txt" style="background-color: transparent;">
      <span class="app-txt" style="background-color: transparent;">ok</span>
    </div>
  </div>
</footer>

<div class="meta">
  <div class="application" style="opacity: 1;">
    <div class="txt" style="background-color: transparent;">
      <span class="app-txt" style="background-color: transparent;">oops</span>
    </div>
  </div>
</div>

【问题讨论】:

  • 在 CSS 中你会使用 :first-child: footer :first-chilld .app-txt。在您的情况下,这更容易,因为两者中只有一个是页脚的孩子,所以如果您的代码示例实际上反映了您的标记,您甚至可以省略 :first-child
  • 您是否要在CSSJAVASCRIPT 中查找特定文本?
  • js 喜欢 span(:alert){div_element(:class=> 'application').div_element(:class=> 'txt').span_element(:class=> 'app-text') } 不在 CSS 中

标签: html css ruby watir page-object-gem


【解决方案1】:

要找到 ok 使用:

footer .app-txt

要定位 oops,请使用:

.meta .app-txt

footer .app-txt {color: red;}
.meta .app-txt {color: orange;}
<footer>
  <div class="application" style="opacity: 1;">
    <div class="txt" style="background-color: transparent;">
      <span class="app-txt" style="background-color: transparent;">ok</span>
    </div>
  </div>
</footer>

<div class="meta">
  <div class="application" style="opacity: 1;">
    <div class="txt" style="background-color: transparent;">
      <span class="app-txt" style="background-color: transparent;">oops</span>
    </div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    鉴于您知道可以根据其祖先元素(即&lt;footer&gt;&lt;div class="meta"&gt;)区分这两个跨度,您应该将其包含在您的定位器中。

    解决方案 1 - 使用嵌套定位器

    页面对象可以是:

    class MyPage
      include PageObject
    
      # The span in the footer
      span(:in_footer) { footer_element.span_element(class: 'app-txt') }
    
      # The span in the meta div
      span(:in_meta) { div_element(class: 'meta').span_element(class: 'app-txt') }
    end
    

    如您所见,通过包含区分祖先元素,即footer_elementdiv_element(class: 'meta'),您可以获得两个文本:

    p page.in_footer
    #=> "ok"
    
    p page.in_meta
    #=> "oops"
    

    解决方案 2 - 使用 CSS 选择器

    或者,根据您对 CSS 选择器(或 XPath)的熟悉程度,您可以使用 @K.RajaSekharReddy 或 @PraveenKumar 提到的 CSS 选择器来缩短页面对象。

    使用 CSS 选择器,页面对象可以是:

    class MyPage
      include PageObject
    
      span(:in_footer, :css => 'footer .app-txt')
      span(:in_meta, :css => '.meta .app-txt')
    end
    

    【讨论】:

      【解决方案3】:

      要找到ok使用:

      footer >.application >.txt >span.app-txt {
         color: blue;
      }
      

      footer >span.app-txt {
         color: blue;
      }
      

      要定位 oops,请使用:

      .meta >.application >.txt >span.app-txt {
         color: orange;
      } 
      

      .meta >span.app-txt {
         color: orange;
      }
      

      【讨论】:

      • 需要像 span(:alert){div_element(:class=> 'application').div_element(:class=> 'txt').span_element(:class=> 'app-text' 这样的定位器)} 不在 CSS 中
      猜你喜欢
      • 2021-06-13
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多