1

Can you please help solve this problem?

When I run this code:

from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By import time from selenium.common.exceptions import StaleElementReferenceException class ActionsMy(): def test(self): driver = webdriver.Chrome() driver.maximize_window() driver.get("https://demoqa.com/") driver.implicitly_wait(3) action = ActionChains(driver) # Sortable driver.find_element(By.XPATH, "//a[contains(text(),'Sortable')]").click() item1 = driver.find_element_by_xpath("//li[contains(text(),'Item 1')]") action.drag_and_drop_by_offset(item1, 0, 150).perform() time.sleep(1) # Resizable driver.find_element_by_link_text("Resizable").click() resizableElement = driver.find_element_by_xpath( "//div[@class='ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se']") action.drag_and_drop_by_offset(resizableElement, 200, 200).perform() dd = ActionsMy() dd.test() 

I get this error:

selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document 

My research showed this problem related to the fact that the element is no longer in the DOM, or it changed.

I have used this solution:

from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By import time from selenium.common.exceptions import StaleElementReferenceException class ActionsMy(): def test(self): driver = webdriver.Chrome() driver.maximize_window() driver.get("https://demoqa.com/") driver.implicitly_wait(3) action = ActionChains(driver) # Sortable driver.find_element(By.XPATH, "//a[contains(text(),'Sortable')]").click() item1 = driver.find_element_by_xpath("//li[contains(text(),'Item 1')]") action.drag_and_drop_by_offset(item1, 0, 150).perform() time.sleep(1) # Resizable driver.find_element_by_link_text("Resizable").click() try: resizableElement = driver.find_element_by_xpath( "//div[@class='ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se']") except StaleElementReferenceException: action.drag_and_drop_by_offset(resizableElement, 200, 200).perform() dd = ActionsMy() dd.test() 

In this case, there are no errors, but the operation is not performed.

I have also used WebDriverWait, but it did not help either.

1

1 Answer 1

1

The problem is in ActionChains, it retains all the previous actions, including the drag_and_drop_by_offset with item1 so when perform() is called it tries to do this action again, but item1 is stale.

There is reset_actions() function to clear those actions, but it doesn't work. There is a bug report that indicates it will be fixed in Selenium 4.

In the meantime, create new ActionChains instance and use it

resizable_element = driver.find_element_by_xpath("//div[@class='ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se']") action = ActionChains(driver) action.drag_and_drop_by_offset(resizable_element, 200, 200).perform() 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.