Java 获取在页面中多次出现的div的xpath

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

我有一个奇怪的要求。我有一个名为“expandThisSection”的div类。我有

<div id=​"requiredAccessoriesContentPlaceHolder" class=​"expandThisSection">​No required accessories are available for this product.​</div>​

<div id=​"requiredAccessoriesContentPlaceHolderMeasurement" class=​"expandThisSection">​&nbsp;​</div>​

<div id=​"optionalAccessoriesContentPlaceHolder" class=​"expandThisSection">​No optional accessories are available for this product.​</div>​

<div id=​"optionalAccessoriesContentPlaceHolderMeasurement" class=​"expandThisSection">​&nbsp;​</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