0

目的:腳本逐個點擊子鏈接和驗證頁面存在如何漢鼎子鏈接 - 「陳舊元素參考:元素沒有被附加到頁面文件」

場景: 當我鼠標懸停到類別鏈接 - 它顯示在右邊的子類別鏈接(列表):

我拿回來懸停 - 鏈接(列表)不會被顯示:

自動化: 我試着鼠標懸停在分類鏈接上! 因此捕獲了類別鏈接的Xpath! 應用於鼠標的動作! 鼠標懸停捕獲0索引(開始)的子鏈接的x路徑! 應用「For Each loop」(前進For循環)逐個捕獲子鏈接x路徑! 在上面的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」中的xpath - 我試圖用鼠標懸停使用或代碼中顯示的xpa,它會引發錯誤.....但是當我把xpath放入動作中時,它會運行代碼,因此我無法使用存儲的x路徑.......當我打印x路徑,一切都很好,但是當我嘗試通過變量使用它....錯誤拋出如新添加的圖像文件中所示 –

相關問題