从SVG selenium java获取文本

从SVG selenium java获取文本,java,html,selenium,testing,svg,Java,Html,Selenium,Testing,Svg,我可以从SVG中的文本标记获取文本。我附加HTML <svg width="553" height="200" style="overflow: hidden;" aria-label="A chart."> <defs id="defs"> <rect x="0" y="0" width="553" height="200" stroke="none" stroke-width="0" fill="#ffffff"> <g

我可以从SVG中的文本标记获取文本。我附加HTML

<svg width="553" height="200" style="overflow: hidden;" aria-label="A chart.">
     <defs id="defs">
     <rect x="0" y="0" width="553" height="200" stroke="none" stroke-width="0" fill="#ffffff">
     <g>
         <text text-anchor="start" x="77" y="22.85" font-family="Arial" font-size="11" font-weight="bold" stroke="none" stroke-width="0" fill="#000000">Clustering done on Mar 30, 2017 11:13 AM</text>
         <rect x="77" y="13.5" width="400" height="11" stroke="none" stroke-width="0" fill-opacity="0" fill="#ffffff">
     </g>

聚类于2017年3月30日上午11:13完成

我想获得的get是2017年3月30日上午11:13完成的
聚类

此定位器应该可以工作:

  • String text=driver.findElement(By.xpath(“/[@id='divClusters']//*[name()='svg'和@aria label='A chart.']//*[name()='g']”)。getText(‌​);
    系统输出打印(文本);
说明:

  • //div
    -删除
    以搜索整个文档,而不仅仅是在当前选定的上下文元素中
  • 删除绝对
    /div[1]/..
    divs引用,因为它不可靠
  • 将svg元素称为
    /*[name()='svg']
  • 向svg元素添加一些有意义的属性
    @aria label='A chart.
  • svg中的元素应该以相同的方式处理:
    /*[name()=“g”],//*[name()=“defs”]
    ——感谢Andersson对此的澄清
尝试以下操作:

driver.findElement(By.cssSelector("#divClusters svg > g‌ > text")).getText();

请将代码张贴在您试图获取“String text=driver.findElement”(By.xpath(“./[@id='divClusters']]]/div[1]/div[1]/div/svg/g[1]/text”))的文本可能重复的地方。getText();'System.out.print(text)这是错误消息org.openqa.selenium.NoSuchElementException:没有这样的元素:无法找到元素@japu-d-cret可能与否重复,您将无法以这种方式找到
svg
元素。我们是否应该使用
*[name()='svg']
而不是
///svg
?是的。正是
/*[name()='svg']
svg
中的元素应以相同的方式处理:
/*[name()=“g”]
/*[name()=“defs”]
…同时修复
//g
driver.findElement(By.xpath("//*[local-name='svg']//*[local-name='g']//*[local-name='text']")).getText();