I was wondering how to simulate a button click on a login page using Selenium. When I try the following, it gives me an error saying that the button is not clickable at the coordinates listed (635, 353).
browser = webdriver.Chrome() browser.find_element(By.XPATH, "//*[@id='signin_btn']").click()
When I try using an ActionChain, it returns the Web Element (the button that’s supposed to be clicked) rather click.
action = ActionChains(browser) action.click(on_element=browser.find_element(By.XPATH, "//*[@id='signin_btn']"))
Advertisement
Answer
I doubt that it returns a WebElement instance but rather the ActionChains instance.
This is due to the signature of the method and allows to chain some actions. Here’s the click
method:
def click(self, on_element=None): """ Clicks an element. :Args: - on_element: The element to click. If None, clicks on current mouse position. """ if on_element: self.move_to_element(on_element) if self._driver.w3c: self.w3c_actions.pointer_action.click() self.w3c_actions.key_action.pause() self.w3c_actions.key_action.pause() else: self._actions.append(lambda: self._driver.execute( Command.CLICK, {'button': 0})) return self
You can see that it return self
.
It won’t click until you call perform
.
action.click(on_element=el).perform()