我有一个奇怪的要求。我有一个名为" expandThisSection"的div类。我有
<div id="requiredAccessoriesContentPlaceHolder" class="expandThisSection">No required accessories are available for this product.</div>
<div id="requiredAccessoriesContentPlaceHolderMeasurement" class="expandThisSection"> </div>
<div id="optionalAccessoriesContentPlaceHolder" class="expandThisSection">No optional accessories are available for this product.</div>
<div id="optionalAccessoriesContentPlaceHolderMeasurement" class="expandThisSection"> </div>
<div class="expandThisSection">
<div style="width:95%">mytext</div>
<ul class="movePos">…</ul>
<div><b>test</b></div>
<div><b>abc</b> Get this text</div>
<div id="vendLogo">…</div>
</div>
<div class="expandThisSection">
<table>...</table>
</div>
我想要具有95%宽度样式的div的内容。我想要的价值是&#34; mytext&#34;。但我无法找到相同的xpath。
此外,我希望xpath在div上方找到div内容,id =&#34; vendLogo&#34;。这就是我想要的#34;得到这个文字&#34;。
注意:ITS确认这个大胆的标签将包含&#34; abc&#34;
怎么做?我正在使用selenium和Java
得到了第一个。无法得到第二个。
代码:
List<WebElement> currentSkuDescription = driver.findElements(By.xpath("//div[@class='expandThisSection']/div"));
for(WebElement currentItem: currentSkuDescription) {
WebElement descriptionBlock = currentItem.findElement(By.xpath("//div[contains(@style, 'width:95%')]"));
description= descriptionBlock.getText();
}
答案 0 :(得分:0)
如果您要通过特定文本(在本例中为'mytext')搜索div
,则可以使用此xpath:
"//div[text()[contains(.,'mytext')]]/ancestor::div[@class='expandThisSection']"
或者如果你想通过样式,你可以使用这个xpath:
"//div[@style='width:95%']/ancestor::div[@class='expandThisSection']"
请注意,第二个xpath仅适用于标记上的内联样式。
对于第二个查询,请尝试以下xpath:
"//div[@id='vendLogo']/preceding-sibling::div[1]"
要获取所需的特定文本,您可以执行以下操作:
String text = driver.findElement(By.xpath("//div[@id='vendLogo']/preceding-sibling::div[1]")).getText();
text.replace(div.findElement(By.tagName("b")).getText(), "");
答案 1 :(得分:0)
尝试删除@class =&#39; expandThisSection&#39;因为你想要的div没有那个class属性(它的父级所做)。此外,也可以进行精确匹配。
By.xpath(&#34; // div [@style =&#39;宽度:95%&#39;]
By.xpath(&#34; // div [contains(@ style,&#39; width:95%&#39;)]
其中任何一个都应该有用。如果你想确保你抓住正确的,相对于父,使用XPath轴......
// div [contains(@class,&#39; expandThisSection&#39;)] / child :: div [contains(@ style,&#39; width:95%&#39;)]