ActionChain click() возвращает веб-элемент вместо щелчка

#python #selenium #webdriver

#python #селен #webdriver

Вопрос:

Мне было интересно, как имитировать нажатие кнопки на странице входа в систему с помощью Selenium. Когда я пытаюсь выполнить следующее, мне выдается сообщение об ошибке, в котором говорится, что кнопка недоступна для нажатия по указанным координатам (635, 353).

 browser = webdriver.Chrome()
browser.find_element(By.XPATH, "//*[@id='signin_btn']").click()
 

Когда я пытаюсь использовать ActionChain, он возвращает веб-элемент (кнопку, на которую нужно нажать), а не щелчок.

 action = ActionChains(browser)
action.click(on_element=browser.find_element(By.XPATH, "//*[@id='signin_btn']"))
 

Ответ №1:

Я сомневаюсь, что он возвращает экземпляр WebElement, а скорее экземпляр ActionChains.

Это связано с сигнатурой метода и позволяет связать некоторые действия. Вот click метод:

 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 
 

Вы можете видеть, что он возвращается self .

Он не будет щелкать, пока вы не вызовете perform .

action.click(on_element=el).perform()