在页面中获取具有多个出现的div的xpath

时间:2015-11-12 15:51:01

标签: java css selenium xpath selenium-webdriver

我有一个奇怪的要求。我有一个名为" 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>

我想要具有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();
          }

2 个答案:

答案 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;)]