【问题标题】:python selenium issue with pop up弹出的python selenium问题
【发布时间】:2021-06-29 17:31:05
【问题描述】:

在我们的 Web 应用程序中,当我们单击提交文件按钮时,它会打开模式对话框。如下图所示。这不是基于窗口的弹出窗口。看起来像基于浏览器的模式甚至没有弹出或警报。 我正在使用 selenium 和 python 进行自动化。 我观察到了

  1. 它没有框架——尝试切换到框架
  2. 它没有警报 - 尝试切换到警报
  3. 它不是新标签或新窗口 - 尝试切换到窗口
  4. 尝试使用切换到活动元素 - 尝试切换到活动元素
  5. 通过直接提供 xpath 进行了尝试-在这里我确保 Xpath 在 DOM 中是正确的

我也试过这段代码 -

我必须单击模式上的上传数据文件按钮。我无法点击它。

【问题讨论】:

  • 请至少提供该块的整个 HTML
  • @Prophet,附加 DOM 的 html 块,如果需要更多详细信息,请告诉我
  • 我明白了。让我知道我的建议是否有效

标签: python angular selenium selenium-webdriver modal-dialog


【解决方案1】:

我认为

driver.find_element_by_css_selector("input.upload")

应该可以。
原因不要忘记此命令之前的等待/延迟。
如果第一个选项不起作用,可能是这样:

driver.find_element_by_css_selector("div.fileUpload.btn span")

UPD
您可以尝试将发送文件路径的文件直接上传到输入元素,如下所示:

elm = driver.find_element_by_xpath("//input[@type='file']")
elm.send_keys("Your_file_full_path")

【讨论】:

  • 我试过你的选择,这些也不起作用。有什么办法,我们可以关注那个模态
  • 如果它只是一个模态,则无需关注它。模态框在屏幕可见区域内吗?也许您需要滚动到它,使用 Actions 移动到它?
  • 它没有滚动选项,但它的模式位于现有浏览器窗口的顶部。我会尝试点击动作链,但不认为这会将元素集中在模态上
  • 或者甚至尝试 JavaScript click
  • 是的,尝试过的操作和 JavaScript 也无法正常工作。基本上,当我单击该上传数据文件按钮时,它会要求从 Windows 资源管理器中浏览文件。是否有任何 api 用于我们可以为该按钮上传文件
【解决方案2】:

您可以尝试使用显式等待:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Uplaod Data File')]")))

进口:

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

确保您在 DOM 中有一个唯一的条目。 (在 Chrome 中按 F12,然后转到 Elements -> CTRL + F 然后搜索 //span[contains(text(), 'Uplaod Data File')])并查看是否有 1/1 匹配

更新 1:

试试ActionChains

ActionChains(driver).move_to_element(WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'Uplaod Data File')]")))).click().perform()

【讨论】:

  • 我已经尝试了 xpath 的唯一条目,例如 upload_data_file_button_xpath = "(//div[contains(@class,'modal-body')]//div[contains(@class,'col-md- 6')])[1]//span[contains(text(),'上传数据文件')]//following-sibling::input" or upload_data_file_button_xpath = "//span[contains(text(),'上传数据文件')]//following-sibling::input"
  • 它抛出了什么错误?您是否也尝试过显式等待?
  • 是的,我也尝试过显式等待,等待 1 分钟然后单击...它无法找到元素
  • 无需等待 1 分钟,在显式等待的情况下它必须抛出 TimeOutException 对吗? , 没有显式等待就抛出了什么异常
  • 试试这个 xpath : (//input[@type='file'])[1] 或 [2],但在文件上传的情况下没关系。只需要一个类型等于文件的输入字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
相关资源
最近更新 更多