更改每个文件的下载位置和名称

我正在使用Selenium和Chrome WebDriver进行自动化。 应用程序必须执行一系列需要使用不同名称(数据+报告类型)保存的下载以及与我正在下载的报告类型相匹配的文件夹。

问题是我只能在实例化新驱动程序时设置默认目录

var chromeOptions = new ChromeOptions(); chromeOptions.AddUserProfilePreference("download.default_directory", downloadDirectory); chromeOptions.AddUserProfilePreference("intl.accept_languages", "nl"); chromeOptions.AddUserProfilePreference("disable-popup-blocking", "true"); IWebDriver driver = new ChromeDriver(@"location chromeDriver", chromeOptions); driver.Navigate().GoToUrl(url); 

因此,我无法重命名文件名或选择相应的目录。 有谁知道我怎么能这样做?

您可以将MS UI Automation与TestStack.White一起使用。 这很难,但确实有效。

 using System.Text.RegularExpressions; using System.Windows.Automation; using TestStack.White.InputDevices; using TestStack.White.UIItems; using TestStack.White.UIItems.Finders; using TestStack.White.UIItems.WindowItems; ... public class SaveAsWindow { AutomationElement _dialog; Window _win; public SaveAsWindow(string title) { List winList = TestStack.White.Desktop.Instance.Windows(); foreach (Window win in winList) { Regex r = new Regex(title, RegexOptions.IgnoreCase); Match m = r.Match(win.Title); if (m.Success) { _win = win; } } _dialog = _win.GetElement(SearchCriteria.ByControlType(ControlType.Window)); } public void Close() { Condition condition = new PropertyCondition(AutomationElement.NameProperty, "Cancel"); AutomationElement noButton = _dialog.FindFirst(TreeScope.Children, condition); System.Windows.Point p = noButton.GetClickablePoint(); Mouse.Instance.Click(p); } public string FileName { set { TextBox fileName =_win.Get(SearchCriteria.ByAutomationId("1001")); fileName.Text = value; } } public void Save() { Condition condition = new PropertyCondition(AutomationElement.AutomationIdProperty, "1"); AutomationElement saveButton = _dialog.FindFirst(TreeScope.Children, condition); System.Windows.Point p = saveButton.GetClickablePoint(); Mouse.Instance.Click(p); System.Threading.Thread.Sleep(1000); } } //// Usage IWebDriver driver = new ChromeDriver(@"location chromeDriver", chromeOptions); driver.Navigate().GoToUrl(url); // it did something and save as window appears. var saveWindow = new SaveAsWindow("title of Chrome browser"); saveWindow.FileName = "c:\what-ever.xlsx"; saveWindow.Save();