2017-07-10 7 views
0

私は、ページ上で特定のアクションを実行するときにプロンプ​​トを表示するangularjsウェブページを持っています。プロンプトが表示されない場合は、コードを無視して続行する必要がありますが、プロンプトが表示された場合は、javascriptプロンプトが受け入れられていることを確認してください。セレンを使用したウェブページのangularjsダイアログボックスの処理

私はファイヤーバグを使用すると、要素の次のプロパティを取得します。 /html/body/div [2]

このページに行くとdiv [number]が変わります。テストケースが実行されるたびにdivathをXPathで使用することはできません。div要素変化するであろう。 divの属性はです。tabindex = -1です。

bool status = false; 
     WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10)); 
     IWebElement alert; 

     if (wait.Until(ExpectedConditions.InvisibilityOfElementLocated((By.XPath("/html/body/div[2]") 
     { 
      Console.WriteLine("I am in if loop"); 
      status = false; 
     } 
     else 
     { 
      Console.WriteLine("I am in else loop"); 
      alert = Browser.Driver.FindElement(By.XPath("/html/body/div[2]")); 
      ((IJavaScriptExecutor)webDriver).ExecuteScript("arguments[0].click()", alert); 
      status = true; 
     } 

     return status; 

どのようにこのようなダイアログボックスを処理し、同じように表示されるかを確認します。

ありがとうございました。

Image of the Angular JS dialog box

+0

まず、モーダルウィンドウ、アラート、またはdivですか?これらに基づいて、解決策が変わる可能性があります。 xpathを変更するには、 'CSS'セレクタ(Seleniumが推奨)を使うか、以下の答えにある' contains'メソッドを使うことができます。関連するHTMLを問題にして追加すると、解決策を簡単に提供できるようになります。 – demouser123

答えて

0

アラートのタイトルを使用してXPathを導き出すことができます。以下のようになるかもしれません。

alert = Browser.Driver.FindElement(By.XPath("/html/body//div/span[contains(text(),'Apply changes to controller configuration')]"));

(//) は、あなたのdivタグにインデックスを使用して回避することができます(私はいくつかのspanタグであるヘッダーのテキストを想像し、正確なHTMLを知りません)。

+0

これはアラートであり、モーダルウィンドウではないことをどのように知っていますか?または別の部門ですか? – demouser123

関連する問題