C# Seleniumの例外処理
背景
前回C#でSeleniumを使う方法についてまとめた。 今回は実際に使う上での注意点をまとめる.
概要
Seleniumの例外がややややこしかったので整理する.
サンプルコードで説明
ついでに非同期処理のスニペットとなっている。
async void button_Click(object sender, EventArgs e) { await Task.Run(() => { using (IWebDriver driver = new ChromeDriver()) { // 終了判定 bool NonError = true; while (NonError) { try { driver.Url = "https://google.com"; // エラー発生させる IWebElement element = driver.FindElement(By.Id("unknowns")); // 下のように要素を探すとエラーはでない。(メモ) var elements = driver.FindElements(By.Id("gsr")); if ( elements.Count > 0) { elements[0].Click(); } } catch (OpenQA.Selenium.NoSuchElementException ex) { Console.WriteLine($"[ERROR] HTML要素が存在しない場合のエラー"); Console.WriteLine(ex.Message); } catch (OpenQA.Selenium.NoSuchWindowException ex) { Console.WriteLine($"[ERROR] ブラウザが閉じられた場合のエラー"); Console.WriteLine(ex.Message); NonError = false; } catch (OpenQA.Selenium.WebDriverException ex) { Console.WriteLine($"[ERROR] WebDriverのエラー. WebDriverが閉じられた場合のエラー"); Console.WriteLine(ex.Message); NonError = false; } catch (Exception ex) { Console.WriteLine(ex.Message); NonError = false; } // 一時待機 //System.Threading.Thread.Sleep(100); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1); } } Console.WriteLine("[while] end.."); }); }
動作の概要としては、SeleniumWebDriverからブラウザを操作する. 例えば、C#のSeleniumを起動させると黒い画面とブラウザが立ち上がる.
黒い画面を閉じると、WebDriverException が投げられる. ブラウザを閉じると、NoSuchWindowException が投げられる.
これまでは良く分かってなかったが、 WebDriverからSocket通信をしてブラウザを操作しているよう.
要素の検索としては、driver.FindElement()だと、要素が存在しない場合にNoSuchElementException が投げられる. 似たようなメソッドだが、driver.FindElements()を利用すると、要素が存在しない場合は、コレクションのlenghtが0になるので、それで判断すると良い.
まとめ
seleniumの例外処理について整理した。 例外処理をキチンとしていないと、アプリを動作させていると、WebDriverの操作から外れた幽霊ブラウザが発生するので注意が必要
参考
Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)
- 作者: 伊藤望,戸田広,沖田邦夫,宮田淳平,長谷川淳,清水直樹,Vishal Banthia
- 出版社/メーカー: 技術評論社
- 発売日: 2016/02/02
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る