かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Selenium C#でファイルダイアログに挑む

Seleniumを使ってWebサイトを操作してるのですが、オシャレなサイトのファイルアップロードでinputタグを隠ぺいしていて、ファイルダイアログをどうしても出さないとファイルをアップロード出来ない作りになっていました。

普通のinputタグについては、簡単にできるようになってるみたいです。

要はfileのinputタグを取得してSendKeysでファイルのパスを送り付ければOKみたいです。(リンク先はJavaだけどわかるよね)

オシャレサイト攻略は…

上記方法でいけばいいのですが、オシャレサイトは、input type="file"のタグが隠ぺいされていてどうしようもない。そこで、我らがWindows FormsのSendKeysを使って以下のようにしてダイアログを操作しました。

this.internetExplorerDriver.Url = "オシャレサイトのURL";
var formmain = this.internetExplorerDriver.FindElement(By.Id("formのID"));
// ファイルアップロードのDIVタグを取得してクリックしてファイルダイアログを出す
formmain.FindElements(By.ClassName("async-upload__picker")).First().Click();

// SendKeysを使ってファイル名をタイプしてEnter
SendKeys.SendWait(@"c:\Users\Kazuki\Pictures\image.PNG");
SendKeys.SendWait("{Enter}");

// そしてサブミット
var button = formmain.FindElements(By.TagName("img")).Last();
button.Click();

参考