寻求正确的xpath来计算元素

时间:2015-12-02 15:14:48

标签: selenium xpath graph

我使用selenium执行任务,并尝试计算kibana图表中的元素列表。

文档就是那样

<div class="chart-wrapper">
  <div class="chart">
    <svg height="454" width="2031">
      <g clip-path="url(#chart-area256)" transform="translate(0,10)">
        <clipPath id="chart-area256"><rect height="439" width="2031" y="0" x="0"></rect>
          </clipPath>
            <g class="pathgroup 0"><path d="...."></path></g>
            <g class="pathgroup 1"><path d=""></path></g>
            <g class="pathgroup 2"><path d=""></path></g>

          <g class="points area">
            ...</g>
    </svg>
  </div>
</div>

我查询所有g或所有@ class =“pathgroup”

print(len(driver.find_elements_by_xpath('//g')))

print(len(driver.find_elements_by_xpath('//g[@class="pathgroup"]')))

由于某种原因,两者都返回零元素。所以我也尝试了其他查询

len(driver.find_elements_by_xpath('//div[@class="chart"]'))

// div [@ class =“chart”]看起来很有效。与devtools一起返回svg,这是对的。但是当我尝试

$x('//div[@class="chart"]/svg').length #devtools  command

再次返回零。虽然

$x('//div[@class="chart"]/*').length #devtools  command

返回正确的值

我只是想知道为什么以及如何!任何想法?

2 个答案:

答案 0 :(得分:0)

len(driver.find_elements_by_xpath('//g[@class="pathgroup"]'))将返回空列表,因为页面上没有“pathgroup”这样的类,但是“pathgroup 0”,“pathgroup 1”...您需要实现以下代码:

driver.find_elements_by_xpath('//*[name()="g" and starts-with(@class, "pathgroup")]') 

尝试让我知道这项工作是否合适

答案 1 :(得分:0)

Xpath有一个count函数试试这个 -

driver.find_elements_by_xpath("count(//div[@class='chart-wrapper']//g)")