【问题标题】:Capture contentDocument for svg object in selenium在 selenium 中为 svg 对象捕获 contentDocument
【发布时间】:2017-03-21 20:33:21
【问题描述】:

我正在尝试自动测试在 Web 应用程序中呈现的 svg 图像。

html 看起来像-

<object class="svgcanvas" type="image/svg+xml" data="test.svg"><h4>Error     loading SVG file</h4>
   #document
    <svg xmlns="http://www.w3.org/2000/svg"     xmlns:xlink="http://www.w3.org/1999/xlink" -webkit-user-drag: none; -webkit-tap-    highlight-color: rgba(0, 0, 0, 0);" viewBox="0 0 1188 840" xml:space="preserve">
      <rect x="0" y="0" width="1188" height="840" style="stroke:none;     fill:white"/>
      <circle cx="20" cy="830" r="0.144857" style="stroke:#E50033; stroke-    width:0.339429"/>
      <g id="XMP_1" style="stroke:#000000; stroke-width:0.339429">
        <path d="M554 401L641 401" style="stroke:#0000FF; stroke-dasharray: 3.5640  3.5640  3.5640  3.5640"/>
      </g>
</object>

我尝试使用以下代码获取 svg 对象,但 svgElement 抛出以下错误:

'((OpenQA.Selenium.Remote.RemoteWebElement)svgElement).Displayed' 引发了“OpenQA.Selenium.StaleElementReferenceException”类型的异常

IWebElement objectTag =  _webDriver.FindElement(By.CssSelector("object.svgcanvas"));
IJavaScriptExecutor js = (IJavaScriptExecutor)_webDriver;
string findingSVG = "return arguments[0].contentDocument;";
var svgElement = js.ExecuteScript(findingSVG, objectTag);

那么,有没有办法测试在对象标签中嵌入了 SVG 的页面?

非常感谢任何帮助。

【问题讨论】:

  • 陈旧元素通常意味着在您找到该元素之后,在对该对象调用任何操作之前,页面会重新加载/更改。确保页面已加载并且所有请求都已完成。
  • 在开始尝试操作 SVG 之前,您需要一种方法来确保 SVG 和主 DOM 已加载。 Google(或 StartPage):selenium 等待页面加载 javascript
  • 异常是否在isDisplayed()的行上抛出? &lt;object&gt; 是否在框架内?

标签: c# google-chrome internet-explorer selenium


【解决方案1】:

您的代码尝试获取&lt;object&gt; 标记的contentDocument returns a Document object from a frame,因此它不应该工作。

&lt;object&gt; 标记可能在 &lt;frame&gt; 内,因此请尝试切换到包含 &lt;svg&gt; 的框架中的内容,然后找到您的元素:

_webDriver.SwitchTo().DefaultContent();
_webDriver.switchTo().Frame("YourFrameName");

IWebElement svgElementInsideFrame =  _webDriver.FindElement(By.TagName("svg"));

【讨论】:

  • 使用 Iframe 我能够完成它。但这里的问题是 Iframe 没有被用来渲染嵌入 svg 内容的对象标签。在 javscript 中,我能够获取对象标签的 contentDocument,但是当我使用 selenium 执行相同的脚本时,它不起作用。
  • 您有示例网址吗?在哪个 selenium 命令上抛出异常?
  • 对不起,我没有任何示例网址。但我上面提到的例外。
猜你喜欢
  • 2017-07-08
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2020-04-07
相关资源
最近更新 更多