Как я могу установить свойства для класса ChromeOptions?
Я пишу сценарий в Selenium WebDriver с использованием C#. В этом сценарии я загружаю некоторые документы с веб-страницы и хочу загружать их динамически. Я использую класс 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. Я провел несколько экспериментов, таких как удаление пути к chromedriver.exe из класса IChromeDriver, но он начал выдавать следующую ошибку:
Файл chromedriver.exe не существует ни в текущем каталоге, ни в каталоге переменной среды PATH.
Какой может быть способ установить ChromeOptions в середине кода, не создавая еще один экземпляр класса IWebDriver?
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}
там.