如何使用Selenium和Java在网页中找到<img/>标签

时间:2019-04-25 07:15:01

标签: java selenium svg xpath svg-image

我想在网页中找到image标签。该应用程序包含一个VIEW ICON。检查视图图标时,它被编码为image标签。我不确定如何找到该特定标签。

下面是我要定位的图像标签:

<svg width="1em" height="1em" class="user-dropdown-icon" viewBox="0 0 14 8">
<image data-name="Vector Smart Object copy 3" width="14" height="8" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAAx0lEQVQYlY2Pv2oCAQyHP//s9waZfIF7j+PG3nbDFQfB7ufaxV3c3BxcFaRduzj5GL/Z5Tr0j1AoKZGeoGggEJLvI0mnqqoDsDCzCXeEpCkw7AJroJb0fEsLpnanl6bpKzAAxk3TfCdJsrsiueDiCnjsmtkPUAIbYCrp6YLkPT/RmdIdP5WQC2ALzCSNWpLXs5gVwdI/AWZ2lOTyCzCX9B6jOfAGPDhz4v82tuRPIAP8z2Wk15mZfbXZMzHkDyAH9pF59P4D+AX710oK5f6gzQAAAABJRU5ErkJggg=="></image>
</svg>

我尝试了以下xpath:

xpath="(//*[@class='user-view-icon'])[11]")

但是没有成功

我要找到视图图标

4 个答案:

答案 0 :(得分:1)

尝试一下:

硒-Java

/*get element by tag name*/
WebElement image = driver.findElement(By.tagName("image")); 

如果页面上有多个图像,请使用

/*get all elements by tag name*/
List<WebElement> images = driver.findElements(By.tagName("image")); 

从上面的列表中确定要使用哪一个(提示:使用foreach循环进行迭代)

答案 1 :(得分:1)

<image>

<image> SVG元素包括SVG文档中的图像。它可以显示raster image个文件或其他SVG文件。

SVG软件必须支持的唯一图像格式是JPEGPNG和其他SVG文件。动画GIF行为未定义。

<image>显示的

SVG文件是treated as an image:外部资源,没有加载,:visited样式为aren't applied,并且不能交互。要包含动态SVG元素,请尝试将<use>与外部URL一起使用。要包含SVG文件并在其中运行脚本,请在<object>内尝试<foreignObject>

  

注意:HTML规范定义为解析HTML时的同义词。此特定元素及其行为仅适用于SVG文档或内联SVG。


此用例

由于<image>元素是 SVG 元素,因此要定位此类元素,您必须在使用SVG namespace来访问元素时明确指定,如下所示:

  • 对于<svg>元素:

    //*[name()="svg"]
    
  • 对于<g>元素:

    //*[name()="svg"]/*[name()="g"]
    
  • 对于<image>元素:

    //*[name()="svg"]/*[name()="image"]
    

参考

您可以在以下位置找到几个相关的详细讨论:

答案 2 :(得分:0)

您的图片没有分配“ user-view-icon” CSS类,并且XPath不起作用。

您可以这样做:

WebElement image = driver.findElement(By.cssSelector("svg.user-dropdown-icon > image"));

答案 3 :(得分:0)

请执行下面的代码,让我知道您得到了什么。 System.out.println(driver.findElements(By.tagName(“ image”))。size());

如果仍然出现空指针异常,则驱动程序对象有问题。如果在页面上找不到图像标签,则此代码应返回0,否则应返回该页面上图像标签的数量

根据图像标签的数量,可以确定要单击的图像标签的索引,然后在该元素上执行单击