2016-08-23 13 views
1

SeleniumとVisual Studioの新機能です。私は単にWebページにログインし、ログインしているページの要素を確認するためのテストケースを作成しました。ログインは問題ありませんが、次のページに移動しますが、 XPath、ID、または名前として。私は取得エラー、次の種類の...Selenium C#は、Xpath、Id、名前でページ上の要素を見つけることができません。

OpenQA.Selenium.NoSuchElementException:いいえ、そのような要素:要素が見つかりません:{ "メソッド": "のxpath"、 "セレクタ": "// * [@ ID =「lblApplicationVersion」] "}

私はまた、このような

new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementExists((By.XPath("//*[@id='lblApplicationVersion']")))); 

...など、いくつかの異なる待機を追加しました...しかし、これは単にページを持っているにもかかわらず、全期間を待ち間違いなくロードされました。あなたがすでに解決策を発見した、ことを聞いて良いですが、あなたのようにそれを共有する必要があり

<html> 
 

 
<head>...</head> 
 
<frameset border="0" framespacing="0" rows="100,89%" frameborder="0"> 
 
    <frame name="ob_frm_header" src="header.aspx" noresize="noresize" scrolling="no"> 
 
    #document 
 
    <!DOCTYPE html> 
 
    <html> 
 

 
    <head>...</head> 
 

 
    <body> 
 
     <form method="post" action="./header.aspx" id="Form1"> 
 
     <div class="aspNetHidden">...</div> 
 
     <script type="text/javascript"> 
 
      ... 
 
     </script> 
 
     <script type="text/javascript"> 
 
      ... 
 
     </script> 
 
     <script type="text/javascript"> 
 
      ... 
 
     </script> 
 
     <div id="header"> 
 
      <div id="header_left"> 
 
      <a id="OEMLogoLink" href="https://observatory.spikescavell.net/" target="_parent">...</a> 
 
      <div id="application_version" class="statuspanel_application_version"> 
 
       <span id="lblApplicationVersion">v4.3.4</span> 
 
      </div> 
 
      </div> 
 
      <div id="MainMenu1" onresize="MainMenuControls.MainMenuStrip.prototype.sizeChanged($get('MainMenu1'));" style="overflow: hidden; width: 1644px;" menuname="Observatory_Main" submenuleftoffset="201" submenuframe="ob_frm_main" submenuid="SubMenu1"> 
 
      </div> 
 
      <div id="statuspanel">...</div> 
 
     </div> 
 
     </form> 
 
    </body> 
 

 
    </html> 
 
    </frame> 
 
    <frameset id="frmset_ob_menu_main" cols="201,81%" border="0" framespacing="0" frameborder="0"> 
 
    <noframes>...</noframes> 
 
    </frameset> 
 

 
</html>

+0

通常通り私がこれを投稿したらすぐに答えを見つけたと思います!ドライバーをフレーム、つまりdriver.SwitchTo()に切り替える必要があるようです。フレーム(フレーム名); – alex

+1

はい、これは問題です、フレームは別々のHTML文書です – kotoj

答えて

0

要素HTMLクロムが以下のとおりであるから...その理由は、同じ問題を抱えている他のユーザーが、実際の問題が何であるかをよく理解できる理由です。

ここでは、私はあなたの問題の解決策を書いています。あなたは以下のようにframeまたはiframe内の要素を見つけるために行く前に現在のドキュメントを設定するには、このframeまたはiframeを切り替える必要がありますので

実際frameまたはiframeは、別々のHTML文書である: -

IWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 

wait.Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt("ob_frm_header")); 

IWebElement element= wait.Until(ExpectedConditions.ElementExists(By.Id("lblApplicationVersion"))); 

WebDriverWaitを実装する必要がない場合は、以下のように簡単に達成できます。 -

driver.SwitchTo().Frame("ob_frm_header"); 
IWebElement element = driver.FindElement(By.id("lblApplicationVersion")); 
関連する問題