0

C# を使用して Selenium WebDriver でスクリプトを作成しています。スクリプトでは、Web ページからいくつかのドキュメントをダウンロードしており、動的パスでダウンロードしたいと考えています。私は 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 を設定する方法は何でしょうか?

4

1 に答える 1

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}");にいくつかの s を追加する必要があるかもしれません{TAB}

于 2016-11-01T15:28:53.520 に答える