【问题标题】:Interacting with Chrome open file dialog with Selenium and C# [closed]使用 Selenium 和 C# 与 Chrome 打开文件对话框交互 [关闭]
【发布时间】:2020-01-10 15:10:07
【问题描述】:

所以我整天都在为此苦苦挣扎。

该页面有一个“选择文件”按钮,以及一个默认隐藏的“保存”按钮。当用户单击“选择文件”时,Chrome 文件打开对话框会显示。用户选择(输入名称)文件后单击“打开”对话框关闭,完成一些验证,如果一切正常,所选文件的路径将显示在页面上,“保存”按钮为显示/启用,以便用户可以单击它实际上传文件。

阅读了各种过去的帖子,我了解到文件打开对话框是一个 HTML INPUT 元素,并且有一个 sendkeys 方法,就像一个文本字段,所以我可以直接与之交互。

这些旧线程的共识是以下应该有效:

Driver.FindElement(By.XPath("//input[contains(@type, 'file')]")).Clear();
Driver.FindElement(By.XPath("//input[contains(@type, 'file')]")).SendKeys("SomeFileName.txt");

但是,当我这样做时,我会收到“未找到元素”错误。我发现我实际上需要显示对话框。所以,我发现我首先需要点击触发对话框的按钮,然后然后我可以解决它:

Driver.FindElement(By.Id("UploadFileBtnId")).Click()
Driver.FindElement(By.XPath("//input[contains(@type, 'file')]")).Clear();
Driver.FindElement(By.XPath("//input[contains(@type, 'file')]")).SendKeys("SomeFileName.txt");

问题是现在显示对话框,继续显示,似乎没有任何机制可以关闭它。即使在测试运行本身完成后它也会保持不变。

我还看到它建议我可以将键发送到触发对话框的 button 元素。也就是说:

    Driver.FindElement(By.Id("UploadFileBtnId")).SendKeys("SomeFileName.txt");

这不会导致错误,也不会触发对话框,但也不会触发任何输入验证,并且永远不会启用保存按钮并阻止测试。

希望有人对如何处理这个僵尸对话提出一两个建议。

兔子

【问题讨论】:

  • 您能否提供有关文件对话框的更多详细信息?这是与您的操作系统相关联的文件资源管理器,还是页面上呈现的 HTML 元素?此外,包括用于文件上传的 HTML 会很有帮助——您的文件上传可能需要不同的选择器。我过去一直使用SendKeys() 方法(稍作调整)并取得了成功。

标签: c# selenium google-chrome selenium-chromedriver


【解决方案1】:

当对话框打开时,您需要从浏览器控件中获取控制权并将其转移到 Windows 对话框中。我猜这个移位部分是你的问题?如果是这样试试这个。打开对话框后,它将选择指定的文件,然后按Enter,对话框将关闭,文件将被上传。适合我,试试吧!

System.Windows.Forms.SendKeys.SendWait(@"C:\File.doc");
Thread.Sleep(1000);
System.Windows.Forms.SendKeys.SendWait(@"{Enter}");

【讨论】:

  • 我不知道这可能如何工作。我假设您的 Forms.SendKeys() 调用会将密钥发送到 test 程序的 窗口(如果它甚至有一个),但是 OP 需要将密钥发送到 browser 窗口,这是一个完全不同的 Windows 进程。
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 2022-07-20
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多