everyone.
I have code in python where I want to click at the element that is located near the end of page:
wait.until(visibility_of_element_located((By.CSS_SELECTOR, "input[name='do-import']")))
wait.until(element_to_be_clickable((By.CSS_SELECTOR, "input[name='do-import']")))
driver.find_element(By.CSS_SELECTOR, "input[name='do-import']").click()
I'm using ChromeDriver.
When launching this script, it scrolls to this element and then crashes with this message:
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point (500, 1707)
I though maximizing window size will help, but it won't.
Why this is happening?
CodePudding user response:
You should first scroll till bottom with the below code:
driver.execute_script("var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = scrollingElement.scrollHeight;")
the try to click:
wait.until(element_to_be_clickable((By.CSS_SELECTOR, "input[name='do-import']"))).click()
But make sure that we have unique 1/1
entry in HTMLDOM:
input[name='do-import']
Steps to check:
Press F12 in Chrome
-> go to element
section -> do a CTRL F
-> then paste the css selector
and see, if your desired element
is getting highlighted with 1/1
matching node.
or if that does not work, try with ActionChain
:
Code trial 1:
driver.execute_script("var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = scrollingElement.scrollHeight;")
wait.until(element_to_be_clickable((By.CSS_SELECTOR, "input[name='do-import']"))).click()
Update:
As mentioned you need to basically scroll till end of the page to let Selenium have the web element in its viewport.
And then trigger Javascript command using execute_script
like below:
driver.execute_script("var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = scrollingElement.scrollHeight;")
driver.execute_script("arguments[0].click();", wait.until(element_to_be_clickable((By.CSS_SELECTOR, "input[name='do-import']"))))