[英]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.