区分具有相同类的两个html元素

时间:2015-11-29 13:17:45

标签: java html selenium xpath

我在下面有这个HTML代码,我想区分这两个PagePostsSectionPagelet因为我只想从第一个 PagePostsSectionPagelet中找到网页元素。我有什么方法可以不使用 <div id="PagePostsSectionPagelet-183102686112-0",因为价值不会总是一样吗?

<div id="PagePostsSectionPagelet-183102686112-0" data-referrer="PagePostsSectionPagelet-183102686112-0">
   <div class="_1k4h _5ay5">
       <div class="_5sem">
       </div>
   </div>
<div id="PagePostsSectionPagelet-183102686112-1" class="" data-referrer="PagePostsSectionPagelet-183102686112-1" style="">
   <div class="_1k4h _5ay5">
       <div class="_5dro _5drq">
           <div class="clearfix">
               <span class="_5em9 lfloat _ohe _50f4 _50f7">Earlier in 2015</span>
               <div id="u_jsonp_3_4e" class="_6a uiPopover rfloat _ohf">
               </div>
           </div>
       <div id="u_jsonp_3_4j" class="_5sem">
           <div id="u_jsonp_3_4g" class="_5t6j">
               <div class="_1k4h _5ay5">
                   <div class="_5sem">
                   </div>
               </div>

尝试使用//div[@class='_1k4h _5ay5']//div[@class ='_5sem'],但它会返回两者。

使用//div[@class='_5dro _5drq']//span[contains(@class,'_5em9 lfloat _ohe _50f4 _50f7') and contains(text(), '')]可帮助我找到第二个PagePostsSectionPagelet

3 个答案:

答案 0 :(得分:0)

我看到div id中的动态只是数字,所以你可以使用类似的东西:

WebElement element = driver.FindElements(By.XPath("//div[contains(.,'PagePostsSectionPagelet')])")[1];

这只会占用第一个网络元素。

答案 1 :(得分:0)

您需要使用以下xpath:

//div[contains(@class,'_1k4h') and contains(@class,'_5ay5')]

因为selenium在一个属性中搜索多个类时无法正常工作。 我的意思是By.Class(&#34; _1k4h _5ay5&#34;)在任何情况下都找不到任何东西和By.Xpath(&#34; // div [@class =&#39; _1k4h _5ay5&#39;]&# 34;)也可以在课堂上找不到任何东西&#34; _5ay5 _1k4h&#34;或&#34; _5ay5 _1k4h&#34;。(因为它们可能是自动生成的,它可能在页面重新加载时有不同的位置)

但是,对于性能和正确性的最佳结果,我认为将是以下xpath:

".//div[contains(@id, 'PagePostsSectionPagelet')][1]" -- for first div
".//div[contains(@id, 'PagePostsSectionPagelet')][2]" -- for second div

答案 2 :(得分:0)

尝试使用如下的css选择器,并根据需要进一步细化。 下面的代码返回一个匹配的WebElements列表,然后你抓住列表中的第一个。

List<WebElement> listOfElements = driver.findElements(By.cssSelector("div[data-referrer]"));

WebElement myElement = listOfElements.get(0);

提示:使用Chrome控制台直接测试您的css和xpath选择器。例如使用 控制台中的$$(&#34; div [data-referrer]&#34;)显示将被选中的内容。