为不同 "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}')]
然后点击:
@browser.link(:xpath => my_xpath).when_present.click
我在上面 xpath
"role_type" 和 "condition" 中只传递了两个参数,但是当我这样做时它无法识别它,因为文本 "admin" 在另一个跨度。
那么如何收集整段文字呢?我也试过这个 XPath expression for selecting all text in a given node, and the text of its chldren post,但这里它给出字符串作为输出,但我想要可点击的元素而不是字符串。
我正在使用 WATIR(Ruby+Cucumber)
我认为您可能不适合使用 XPath,因为我认为没有字符串连接功能(至少在 XPath 1.0 中是这样)。
相反,我会使用其他 Watir 和 Ruby 方法。例如,以下将遍历配置 div 元素并找到包含角色 link 和条件文本的元素。从找到的元素中,您可以单击其 link.
$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
如果您只想找到 "Never logged on as admin" 旁边的第一个 link,则
@browser.p(:text => "Never logged as admin").parent.link.click
否则,可能需要像贾斯汀的回答这样的方法。
这是我写的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}')]
然后点击:
@browser.link(:xpath => my_xpath).when_present.click
我在上面 xpath
"role_type" 和 "condition" 中只传递了两个参数,但是当我这样做时它无法识别它,因为文本 "admin" 在另一个跨度。
那么如何收集整段文字呢?我也试过这个 XPath expression for selecting all text in a given node, and the text of its chldren post,但这里它给出字符串作为输出,但我想要可点击的元素而不是字符串。
我正在使用 WATIR(Ruby+Cucumber)
我认为您可能不适合使用 XPath,因为我认为没有字符串连接功能(至少在 XPath 1.0 中是这样)。
相反,我会使用其他 Watir 和 Ruby 方法。例如,以下将遍历配置 div 元素并找到包含角色 link 和条件文本的元素。从找到的元素中,您可以单击其 link.
$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
如果您只想找到 "Never logged on as admin" 旁边的第一个 link,则
@browser.p(:text => "Never logged as admin").parent.link.click
否则,可能需要像贾斯汀的回答这样的方法。