【发布时间】: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()的行上抛出?<object>是否在框架内?
标签: c# google-chrome internet-explorer selenium