我有这样的结构:
<div class="Container">
<div class="HighlightContainer">
<div class="NodeTextHighlightContainer">
<span class="TreeItemSelected">Products</span>
</div>
<button class="ContainerSelectedMenu" type="button"></button>
</div>
</div>
由于DOM的行为方式和尝试保持动态,我只能定位包含文本产品的范围 . 使用类似的东西:
Driver.FindElement(By.XPath("//div[contains(@class, 'Container')]/descendant::span[text() = 'Products']"));
但是,我需要根据该span元素确定 class="ContainerSelectedMenu"
的div,最好的方法是什么?有点像获取Container的子div的父div然后找到button元素 .
2 回答
我已经找到了不同的方法,通过上下往复运行来做到这一点很好,但我现在的偏好是这种方法:
基本上,你把
text() = 'Products'
的后代作为你真正想要的div
标签的要求的一部分,这是父 . 然后你可以使用//button
或//button[@class='ContainerSelectedMenu']
轻松搜索按钮你实际上这里不需要
descendant
轴,因此可以简化一下:用英语讲...
找到
div
那个1. 有
@class
,其中包含"Container"和2. 有一个带有文本
Products的
span` 元素找到
div
的后代button
一种方法是定位
span
,然后转到祖先div
,然后返回到匹配class
的元素...另一种方法是将
div
,然后是span
,然后上升到两个级别,然后返回到匹配class
的元素...另一种方式(类似于@mrfreester)是匹配
div
,测试span
,并直接转到匹配class
的元素...所有这三个都匹配
button
.