1

各テストで実行する一般的なメソッドのセットがあります。カートにいくつかのアイテムを追加する必要があるように、各アイテムに対してテスト全体が実行されます。しかし、最初の項目では問題なく実行され、2 番目の項目でプロセスが繰り返されると、テキストの検証中に失敗し、StaleElementReferenceException.

アイテムをもう一度検索したり、これを解決するにはどうすればよいですか? ありがとう。

失敗するコード:

public bool VerifyItemPresentInCart()
{
        //Get the cartsize and verify if one item present
        IWebElement cartSize = driver.FindElement(By.CssSelector("div[class='cart-size']>div"));                                             
        string actualMsg = cartSize.Text;
        string expectedMsg = "1";
        VerifyIfTextPresentMethod(expectedMsg,actualMsg);                
        return true;                  
}

でのエラー

  IWebElement cartSize = driver.FindElement(By.CssSelector("div[class='cart-size']>div"));

更新: html コード

  <a class="header-button show-cart has-cart-items" data-view-name="cart-badge" data-view-cid="view5" data-model-cid="c6" data-tappable="true">
   Cart
   <div class="cart-size">
     <div>3</div>
   </div>

新しいコード:

   IWebElement cardDetails = driver.FindElement(By.CssSelector("div[class='form-field clear-fix']>label[for='cardNumber']>div"));
4

1 に答える 1

3

あなたのコード行を結合してみます:

IWebElement cartSize = driver.FindElement(By.CssSelector("div[class='cart-size']>div"));                                                        
string actualMsg = cartSize.Text;

そのため、次のようになります。

string actualMsg = driver.FindElement(By.CssSelector("div[class='cart-size']>div")).Text;

これは、要素が選択されたときにテキストが取得されることを意味します。親を介して要素のハンドルを取得してからテキストを取得するまでの間に、その要素へのフォーカスが失われているのではないかと思います。または、css からを削除して>div、テキストが取得されるかどうかを確認します。

これが機能しないということは、直面している状況がThe Element is not Attached to the DOMというタイトルの下のポイントであることを示唆しています。ターゲット テキストが div 内にあるという事実は、この領域が JavaScript によってスタイル設定されているため、特定の時間にのみアクティブになる可能性があることを示唆しています。この要素がアクティブではないが、アクセス可能である場合でも、StaleElementReferenceExceptionそのページに示されているように、 を受け取ることができます。次のステップは、ペアレント div をクリックして、そのテキストにアクセスする前にこのターゲット div をアクティブ化できるかどうかを確認することです (たとえば、要素が DOM にアタッチされていることを確認してから、提供したコードを呼び出します)。

于 2013-06-05T03:24:35.647 に答える