[英]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.