繁体   English   中英

在不同的“ span”标签中但在一个“ p”标签下为整个文本编写可点击的xpath

[英]Write clickable xpath for entire text in different “span” tags but under one “p” tag

我认为这是我编写的xpath ,但它并不是最佳的xpath expression

//div[contains(@class,'config')]/a[contains(.,'student')]/../p[contains(.,'Never logged as ') and contains(.,'admin')]

HTML是这样的:

<div class="config">
  <a class="something student something " href="something" htmlelement = "something">
     <div class="bla bla"/>
     <div class="bla bls> xyz </div>
     <div class="bla blab">abc</div>
     <span>Allow it</span>
  </a>
  <p>
     <span>Never logged as</span>
     <span class="b">admin.</span>
     <img src="/images/info.png"/>
  </p>
  <div class="bla bla">qwerty</div>
</div>

现在,我要编写一个通用的xpath如下所示: //div[contains(@class,'config')]/a[not(contains(.,'#{$role_type}'))]/../p[contains(.,'#{$condition}')] xpath a xpath //div[contains(@class,'config')]/a[not(contains(.,'#{$role_type}'))]/../p[contains(.,'#{$condition}')] xpath //div[contains(@class,'config')]/a[not(contains(.,'#{$role_type}'))]/../p[contains(.,'#{$condition}')] xpath //div[contains(@class,'config')]/a[not(contains(.,'#{$role_type}'))]/../p[contains(.,'#{$condition}')]

并单击此: @browser.link(:xpath => my_xpath).when_present.click

我在上面的xpath “ role_type”和“ condition”中仅传递了两个参数,但是当我这样做时,它无法识别它,因为文本“ admin”在另一个范围内。

那么如何收集整个跨度文本呢? 我尝试使用此XPath表达式选择给定节点中的所有文本,并且也将其chldren的文本发布,但是这里它给出的是字符串作为输出,但我希望clickable元素不是字符串。

我正在使用WATIR(Ruby + Cucumber)

我认为您可能不适合使用XPath,因为我不相信它具有字符串连接功能(至少在XPath 1.0中)。

相反,我将使用其他Watir和Ruby方法。 例如,以下内容将遍历config div元素,并找到包含角色链接和条件文本的元素。 然后从找到的元素中单击其链接。

$role_type = 'student'
$condition = 'Never logged as admin.'

config = browser.divs(class: 'config').find do |div|
    div.link(class: $role_type).exists? && div.p(text: $condition).exists?
end
config.link.click

如果您只想找到“从不以管理员身份登录”旁边的第一个链接,则

@ browser.p(:text =>“从不以管理员身份登录”).parent.link.click

否则,可能需要诸如贾斯汀的答案之类的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM