【问题标题】:How to click on the 2nd layer of element with mouse in selenium webdriver Python?如何在 selenium webdriver Python 中用鼠标单击第二层元素?
【发布时间】:2021-01-11 11:20:04
【问题描述】:

我有一个代码假设“鼠标悬停”元素的第一层,然后单击执行“鼠标悬停”操作时出现的元素的第二层。如果我执行下面的代码,它总是向我显示一个错误 'NoSuchElementException: Message: Unable to locate element: .e'。请帮助理解我做错了什么。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

def select_random_sentence_to_delete(self):
      self.driver = webdriver.Firefox()
      self.driver.get('http://todomvc.com/examples/react/#/')
      action = ActionChains(self.driver);
      firstLevelMenu = self.driver.find_element(By.CLASS_NAME, "view"[2])
      action.move_to_element(firstLevelMenu).perform()
      secondLevelMenu = self.driver.find_element(By.CLASS_NAME, "destroy"[2])
      action.move_to_element(secondLevelMenu).perform()
      secondLevelMenu.click() ```

【问题讨论】:

    标签: python selenium selenium-webdriver nosuchelementexception


    【解决方案1】:

    您需要链接这些操作,并且只有在您perform() 的所有操作之后:

    driver.get("http://todomvc.com/examples/react/")
    for i in range(10):
        WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".new-todo")))
        driver.find_element(By.CSS_SELECTOR, ".new-todo").send_keys(i, Keys.ENTER)
    WebDriverWait(driver,30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".view input")))
    for ele in driver.find_elements(By.CSS_SELECTOR, ".view input"):
        ele.click()
        actions = ActionChains(driver)
        actions.move_to_element(ele).move_to_element(driver.find_element(By.CSS_SELECTOR, ".destroy")).click().perform()
    

    注意:我添加了WebDriverWait,所以你也需要导入它。

    这里是导入:

    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    

    【讨论】:

    • 不是visibility_of_element_located() 更适合代替presence_of_all_elements_located()
    • 等一下 :) 它的presence_of_all_elements_located() 所以替换应该是visibility_of_all_elements_located(),作为元素s -> visibility_of_all*
    • @oksa23 很高兴能为您提供帮助。请accept 答案,点击我的答案旁边的空心刻度线,它就在投票箭头下方,所以刻度线变成绿色。
    猜你喜欢
    • 2022-01-02
    • 1970-01-01
    • 2020-12-22
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    相关资源
    最近更新 更多