我正在嘗試將多個產品添加到購物車
WebElement ele = driver.findElement(By.xpath("//li[text()='Grocery ']"));
//Creating object of an Actions class
Actions action = new Actions(driver);
//Performing the mouse hover action on the target element.
action.moveToElement(ele).perform();
Thread.sleep(3000);
driver.findElement(By.xpath("//li[@title='staples']")).click();
Thread.sleep(5000);
List<WebElement> products = driver.findElements(By.xpath("//div[@class='product-grid-img']"));
for(int i=0;i<products.size();i )
{
products.get(i).click();
Thread.sleep(3000);
driver.findElement(By.xpath("(//span[text()='ADD TO CART'])[1]")).click();
driver.navigate().back();
driver.navigate().refresh();
}
uj5u.com熱心網友回復:
正如我們所看到的,通過單擊產品會打開一個新頁面,以便回傳您明確導航到上一頁并重繪 頁面。
當您離開原始頁面或重繪 它時,Selenium 在該頁面上收集的元素變得不再相關,也就是過時。
您可以在此處或在任何其他有關此問題的在線資源中閱讀。
要使您的代碼作業,您必須再次獲得該產品。
這樣的事情應該作業:
List<WebElement> products = driver.findElements(By.xpath("//div[@class='product-grid-img']"));
for(int i=0;i<products.size();i )
{
List<WebElement> products = driver.findElements(By.xpath("//div[@class='product-grid-img']"));
products.get(i).click();
Thread.sleep(3000);
driver.findElement(By.xpath("(//span[text()='ADD TO CART'])[1]")).click();
driver.navigate().back();
driver.navigate().refresh();
Thread.sleep(3000);
}
uj5u.com熱心網友回復:
每次您導航到任何地方時,您的瀏覽器都會在記憶體中構建一個頁面型別的地圖。這稱為DOM。當您導航到其他地方時,DOM 將替換為新頁面的新 DOM。瀏覽器不會保留您訪問過的 DOM 的歷史記錄,因此當您導航回已經去過的地方時,瀏覽器必須再次構建 DOM。
讓我們看一下代碼的相關部分:
List<WebElement> products = driver.findElements(By.xpath("//div[@class='product-grid-img']"));
在當前 DOM 中查找一堆元素。
for(int i=0;i<products.size();i )
{
products.get(i).click();
第一次導航到另一個頁面。所以丟棄你剛剛在上面找到的所有元素并重建 DOM。
第二次回圈時,您嘗試使用當前DOM 中不再存在的元素。這會引發 StaleElementException。
Thread.sleep(3000);
driver.findElement(By.xpath("(//span[text()='ADD TO CART'])[1]")).click();
driver.navigate().back();
再次導航到某個地方。DOM 的另一個重建。
driver.navigate().refresh();
不會有幫助。
}
您將需要重新構建回圈以每次都找到元素。也許是這樣的:
for(int i=0;i<products.size();i )
{
// You will have to find the correct XPath here!
WebElement product = driver.findElement(By.xpath("//div[@class='product-grid-img'][" i "]"));
product.click();
Thread.sleep(3000); // You might want to use a proper wait here.
driver.findElement(By.xpath("(//span[text()='ADD TO CART'])[1]")).click();
driver.navigate().back();
}
uj5u.com熱心網友回復:
StaleElementExceptions 是由轉到新頁面并訪問不再有效的舊元素引起的。
你可以做其他人所做的并重新獲取值,或者如果它在一個標簽中,你可以只收集所有的href,然后只收集 driver.get() 給他們消除對 driver.navigate().back() 的需要;
.getAttribute("href")
uj5u.com熱心網友回復:
我剛剛在 Google 中搜索了您的查詢以進行檢查,旨在了解有關問題和主題究竟是什么的更多資訊,我得到了以下資訊:
“人們也問”
(Q)selenium 如何修復舊元素參考元素未附加到頁面檔案中的問題?
解決方案:找不到DOM中的元素,因為Selenium搜索元素時您的頁面未完全加載。為了解決這個問題,你可以設定一個明確的等待條件,告訴 Selenium 等待元素可以被點擊。
https://www.google.com/search?q=his error "stale element reference: element is not attached to the page document",&sourceid=chrome&ie=UTF- 8
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394377.html
