Java 获取在页面中多次出现的div的xpath
我有一个奇怪的要求。我有一个名为“expandThisSection”的div类。我有Java 获取在页面中多次出现的div的xpath,java,css,selenium,xpath,selenium-webdriver,Java,Css,Selenium,Xpath,Selenium Webdriver,我有一个奇怪的要求。我有一个名为“expandThisSection”的div类。我有 <div id="requiredAccessoriesContentPlaceHolder" class="expandThisSection">No required accessories are available for this product.</div> <div id="requiredAccessoriesContentPlaceHolderMe
<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>
本产品不提供所需的附件。
此产品没有可选配件。
我的文本
…
测试
abc获取此文本
…
...
我希望div的内容具有95%宽度的样式。我希望的值是“mytext”。但我无法找到相同的xpath
我还需要xpath来查找id为的div上方的div内容=“商标”。这就是我想要的“获取此文本”
注意:此粗体标签保证包含“abc”
怎么做?我正在使用selenium和Java
我得到了第一个。没办法得到第二个
代码:
List currentSkuDescription=driver.findElements(By.xpath(“//div[@class='expandThisSection']/div”);
对于(WebElement currentItem:currentSkuDescription){
WebElement descriptionBlock=currentItem.findElement(By.xpath(“//div[contains(@style,'width:95%'))]”);
description=descriptionBlock.getText();
}
如果要通过特定文本(在本例中为“mytext”)搜索div
,可以使用以下xpath:
"//div[text()[contains(.,'mytext')]]/ancestor::div[@class='expandThisSection']"
"//div[@style='width:95%']/ancestor::div[@class='expandThisSection']"
"//div[@id='vendLogo']/preceding-sibling::div[1]"
或者,如果需要样式,可以使用以下xpath:
"//div[text()[contains(.,'mytext')]]/ancestor::div[@class='expandThisSection']"
"//div[@style='width:95%']/ancestor::div[@class='expandThisSection']"
"//div[@id='vendLogo']/preceding-sibling::div[1]"
请注意,第二个xpath仅在对标记进行内联样式设置时有效
对于第二个查询,请尝试以下xpath:
"//div[text()[contains(.,'mytext')]]/ancestor::div[@class='expandThisSection']"
"//div[@style='width:95%']/ancestor::div[@class='expandThisSection']"
"//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(), "");
尝试删除@class='expandThisSection',因为您想要的div没有该class属性(它的父级有)。此外,可能会出现精确匹配 By.xpath(“//div[@style='width:95%']
xpath(“//div[contains(@style,'width:95%')) 这两种方法中的任何一种都应该起作用。如果您想确保获取的是相对于父级的正确方法,请使用XPath轴 //div[contains(@class,'expandThisSection')]/child::div[contains(@style,'width:95%)]
试试这个
“//div[@id='vendLogo']/previous sibling::div[1]”
@GitCoder-我提供的xpath将在一行代码中解决您的问题。我建议使用它,而不是循环使用它。:)查看我的代码。我处理了它:)帮助我获取第二个//b[contains(text(),'abc')]/祖先::div