2016-11-08 11 views
1

Webアプリケーションでレンダリングされるsvgイメージのテストを自動化しようとしています。コンテンツをキャプチャしてsvgオブジェクトをセレンに入れます

htmlのは、私は以下のコードを使用して、SVGオブジェクトを取得しようとしましたが、svgElementは、次のエラースロー

<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> 

like-になりますので、

'((OpenQA.Selenium.Remote.RemoteWebElement)svgElement).Displayed' threw an exception of type '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が埋め込まれているページをテストするには?

ご迷惑をおかけして申し訳ございません。

+0

古い要素は通常、後にあなたが要素を発見し、呼び出す前にあることを意味そのオブジェクトがページをリロード/変更したときのアクション。ページがロードされ、すべての要求が完了していることを確認します。 – lauda

+0

SVGを操作しようとする前に、SVGとメインDOMがロードされていることを確認する方法が必要です。 Google(またはスタートページ):セレンは、JavaScriptがロードされるのを待ちます – MikeJRamsey56

+0

'isDisplayed()'の行に例外がスローされますか? ' 'はフレームの中にありますか? – Moshisho

答えて

0

<object>タグcontentDocumentのコードはreturns a Document object from a frameであるため、正常に動作するはずがありません。

<object>タグはので、あなたの要素を見つけ、その後<svg>が含まれており、フレーム内のコンテンツに切り替えてみてください<frame>の内側に、おそらくです:

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

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

Iframeを使用していますが、ここで問題になるのは、iframeがsvgコンテンツが埋め込まれたオブジェクトタグをレンダリングするために使用されていないことです。 javscriptで私はオブジェクトタグのcontentDocumentを取得することができますが、私はセレンを使用して同じスクリプトをexcute、その動作しません。 – Mary

+0

サンプルURLはありますか?どのようなセレンのコマンドで例外がスローされますか? – Moshisho

+0

申し訳ありませんが、私は例のURLを持っていません。しかし、私は例外を上記のようにしています。 – Mary

関連する問題