Python-Selenium无法在连续循环

时间:2017-06-01 08:26:42

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver

我正在自动执行在我们的Web应用程序上创建文件夹结构的任务,它需要右键单击并打开上下文菜单,我可以从中添加新文件夹。

folder_path = "Folder A\Folder B\Folder C"
folder_path_list = folder_path.split('\\')
for folder in folder_path_list:
    try:
        folder = WebDriverWait(browser, 15).until(EC.element_to_be_clickable((By.CSS_SELECTOR,
                                "div.tree-row.selected + div.tree-children > div > div > a[title='{}']".format(folder))))
        folder.click()
        time.sleep(5)
    except:
        parent_folder = WebDriverWait(browser, 8).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.tree-row.selected > a > span.tree-label")))
        parent_folder.click()
        actionchains.context_click(parent_folder).perform()
        add_new_folder_icon = WebDriverWait(browser, 8).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li.CMicon-add-location")))
        add_new_folder_icon.click()
        del parent_folder

此代码针对循环中的每个文件夹运行,该循环在第一次迭代期间成功执行,但在第二次迭代时无法对第3行执行右键单击。它会抛出 StaleElementReferenceException 错误。我尝试了以下解决方案但没有成功

  • 添加del命令以清除每个循环结束时的parent_folder变量。
  • 刷新整个浏览器页面并重新导航到我创建的最后一个文件夹,但它会引发相同的异常。

让我感到困惑的是,它只会在执行右键单击时遇到问题,即使它能够找到元素并左键单击它并选择它。

1 个答案:

答案 0 :(得分:1)

动作链在哪里初始化?尝试重新初始化动作链,然后在except循环中使用它

actionchains = ActionChains(browser)
actionchains.context_click(parent_folder).perform()