【发布时间】: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