我正在使用C#在Selenium WebDriver中编写脚本。在脚本中,我从网页下载了一些文档,我想以动态路径下载它。我正在使用ChromeOptions类及其方法来完成任务。这是我的示例代码:
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("download.default_directory", "C:\Users\Desktop\MyDownloads");
IWebDriver driver = new ChromeDriver(@"C:\Users\chromedriver_win32\" , options);
如果我在函数启动时使用上面的代码,那么它可以正常工作。
但是,我想在函数中间设置ChromeOptions类的属性,因为我的路径是动态的。因此,我只需使用字符串变量更改硬编码路径,并将以下代码放在函数
的中间ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("download.default_directory", strDownloadFinalPath);
IWebDriver driver = new ChromeDriver(@"C:\Users\chromedriver_win32\" , options);
现在,当我在功能中间或运行时更新ChromeOptions时,它会创建另一个ChromeDriver实例并再打开一个镀铬窗口。它不会更新ChromeOptions类的属性。我做了一些实验,比如从IChromeDriver类中删除chromedriver.exe的路径但是它开始出现以下错误:
chromedriver.exe文件在当前目录中不存在或 在PATH环境变量的目录中。
在不创建IWebDriver类的另一个实例的情况下,在代码中间设置ChromeOptions的方法是什么?
答案 0 :(得分:1)
您只能通过类构造函数设置ChromeOptions,从而设置下载路径。在您实例化ChromeDriver后,您无法更新任何属性。所以你最后一个问题(“没有创建另一个实例”)的答案是,你不能。
我要做的是在Chrome中检查“询问下载前保存每个文件的位置”设置,然后在测试中与“另存为”对话框提示进行交互,输入完整的动态保存文件路径并单击保存。问题是这是一个Windows对话框,Selenium无法与之交互。我正在使用MS CodedUI来处理它。我的另存为提示的对话框类:
using Microsoft.VisualStudio.TestTools.UITesting.WinControls;
public class WindowsDialogBoxView : WinWindow
{
public WindowsDialogBoxView()
{
this.SearchProperties[WinWindow.PropertyNames.ClassName] = "#32770";
}
public WinEdit FilenameEdit
{
get
{
this.filenameEdit = new WinEdit(this);
this.filenameEdit.SearchProperties[WinEdit.PropertyNames.Name] = "File name:";
return this.filenameEdit;
}
}
private WinEdit filenameEdit;
用法:
WindowsDialogBoxView WindowsDialogBox = new WindowsDialogBoxView();
Keyboard.SendKeys(WindowsDialogBox.FilenameEdit, "C:\\myFileSavePath\\Blah\\FileToSave.abc");
我无法与对话框的“保存”按钮进行交互,因此我使用Keyboard.SendKeys("{ENTER}");
您可能需要在其中添加一些{TAB}
。