![](/img/trans.png)
[英]How can I pass a directory path, ChromeOptions, and ChromeDriverService to a new ChromeDriver?
[英]How can I set the properties to ChromeOptions class?
我正在使用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实例并打开另一个chrome窗口。 它不会更新ChromeOptions类的属性。 我做了一些实验,例如从IChromeDriver类中删除chromedriver.exe的路径,但它开始出现以下错误:
chromedriver.exe文件在当前目录或PATH环境变量上的目录中不存在。
在代码中间设置ChromeOptions而不创建IWebDriver类的另一个实例的方法是什么?
您只能通过类构造函数设置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}
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.