0

目的:スクリプトは、ページの存在を一枚ずつのサブリンクをクリックして、検証するどのように手渡しサブリンクへ - 「古くなった要素の参照:要素は、ページの文書に添付されていない」を

シナリオ: Iカテゴリーリンクにマウスホバー - それは、右側にサブカテゴリーリンク(リスト)を表示:私は戻ってホバーを取るよう

- リンク(リスト)が表示されますされていません。

オートメーション: を私が試しましたカテゴリーリンク上でマウスを動かすと!! はカテゴリリンクのXパスをキャプチャしました! マウスオーバーに適用されたアクション! OnマウスホバーOn 0 index(start)でSub linksのxパスをキャプチャしました! "For Each Loop"(For Forループ)を適用して、サブリンクxパスを1つずつキャプチャします。 上記のforループの中で、サブリンクをクリックするために "アクション"を使用しました!!

問題:それはサブクリック数の - 以降の繰り返しでインデックス0のリンク、カテゴリのリンクをマウスでホバーが行われているにもかかわらず、サブリンクをキャッチすることができません...

取得する方法---------------

public static WebElement Add_EditCorpUser(WebDriver driver) throws InterruptedException 
{ 
    driver.switchTo().defaultContent(); 
    driver.switchTo().frame(1); 
    Actions action = new Actions(driver); 


    element=driver.findElement(By.xpath(".//td[@title='Security Admin']/following::td[1]/span[contains(text(),'Security')]")); 
    action.moveToElement(element).build().perform();  
    List<WebElement> arrayList=driver.findElements(By.xpath(".//table[@class='hideHeader']//span[@id='subMenu']//div[@id='i_2sub']//tbody/tr")); 

    List<String> linksname = new ArrayList<>(); 
    for (WebElement w:arrayList) { 
      linksname.add(w.getText()); 
      System.out.println("value ---------------- --"+ linksname); 
      action.moveToElement(w).click().build().perform(); 
      Thread.sleep(10000); 

      driver.switchTo().defaultContent(); 

      driver.switchTo().frame(1); 

      action.moveToElement(driver.findElement(By.xpath(".//td[@title='Security Admin']/following::td[1]/span[contains(text(),'Security')]"))).build().perform(); 



      Thread.sleep(10000); 

    } 

:第二、第三........繰り返しでサブリンク..

は、次のコードです-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------コメントのとおりで修飾コード----------------------

public static WebElement element=null; 
    public static WebElement Add_EditCorpUser(WebDriver driver) throws InterruptedException 
{ 
    driver.switchTo().defaultContent(); 
    driver.switchTo().frame(1); 
    Actions action = new Actions(driver); 


    element=driver.findElement(By.xpath(".//td[@title='Security Admin']/following::td[1]/span[contains(text(),'Security')]")); 
    action.moveToElement(element).build().perform();  
    List<WebElement> arrayList=driver.findElements(By.xpath(".//table[@class='hideHeader']//span[@id='subMenu']//div[@id='i_2sub']//tbody/tr")); 

    String[] xpa=new String[arrayList.size()]; 
    for(int i=1;i<arrayList.size();i++) 
    { 
     xpa[i]="\".//table[@class='hideHeader']//span[@id='subMenu']//div[@id='i_2sub']//tbody/tr["+i+"]\""; 


    } 

    for(String a: xpa) 
    { 
     if(a!=null){ 
      System.out.println(a); 
      action.moveToElement(driver.findElement(By.xpath(a))).click().build().perform(); 
      Thread.sleep(10000); 
      driver.switchTo().defaultContent(); 
      driver.switchTo().frame(1); 
      System.out.println("Switched to new frame"); 
      action.moveToElement(element).build().perform();  

     } 

enter image description here

enter image description here

答えて

1

あなたは古い要素を取得要素を検索し、その上でアクションを実行する前にページが変更/再読み込みされています。

ページ内の操作を行う前に、ページが完全に読み込まれていることを確認してください。 最初にページが読み込まれるまで待ってから、>要素を見つけてアクションを実行します。

すべてのリンクを配列に保存して、それぞれのリンクをクリックすると機能しません。
リンクのセレクタで配列を作成し、その配列をforループで使用する必要があります。無効なセレクタを持っている第二のコードで

、あなたは余分なダブルquotes.try


xpa[i]="//table[@class='hideHeader']//span[@id='subMenu']//div[@id='i_2sub']//tbody/tr["+i+"]"; 

を持ち、ブラウザとアップデートでそれをチェックした文字列を印刷し、連結を使用し、XPathは文字列であることに注意してください有効なxpathを得るために。

+0

私はサブリンクのxパスを収集し、それらにヒットしようとした新しいコードを書いた:しかし、私はここに直面している---変数 "a"または "xpa"でxpathsを収集した私はどちらかを使用してマウスのホバーにしようとしたか、またはxpaのコードで示されているようにエラーをスロー.....しかし、私はコードを実行するアクションにxpathを置くので、私は格納されたxパスを使用することができません.......私はxのパスを印刷すると、すべては問題ありませんが、私は変数を介して使用しようとすると....エラーは、新しい追加画像ファイル –

関連する問題