かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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();

参考