通常、このプロセスは次のようになります。xpath式をchromeまたはfirepathで作成し、それをコピーして、C#コードの要素に属性を追加します。 ただし、ロケーターを修正するか、単にロケーターが指す要素を確認する必要があります。 そして、 [@ id = 'myId']のような述語を[contains(@id = 'Id')]に変更するだけでも、実行時にテストクラッシュで終了します。 一般に、このような単純なタスクには、コピー、貼り付け、ウィンドウ間の切り替えなどのアクションが多すぎます。 ReSharper用のプラグインを作成することにしました。これにより、Alt + Enterでブラウザーの要素が強調表示されます。
問題の声明
ReSharperとChromeのプラグインを作成します。これらのプラグインを使用すると、2つの簡単なタスクを解決できます。
- 静的アナライザーXPath式。
- ブラウザでセレンロケーターをAlt + Enterで強調表示します。
解決策
最初のタスクでは、すべてが非常に単純であることが判明しました。 私はxpathのパーサーとバリデーターを作成せず、単に.NETライブラリのXmlDocumentクラスを使用することにしました。
XmlDocument document = new XmlDocument(); var navigator = document.CreateNavigator(); try { navigator.Compile("xpath expression"); // , } catch (XPathException exception) { // }
質問の2番目の部分は、次のように実装されました。
- ReSharperプラグインはlocalhostのTcpServerを発生させます
- Chromeプラグインは常に「強調するものはありますか?」
- ユーザーがAlt + Enterを押して強調表示要素を選択するまで、何が強調表示されるかを示すリスト
XPathを使用してdomの要素を検索するには、 jquery.xpath.jsライブラリを使用します。
以前にchromeのプラグインを書いたことがないので、私にとって最も難しいことはhttpsサイトからhttp localhostにリクエストを送信することでした。 Google Chromeは、Webページからのそのようなリクエストをすべてブロックします。 解決策を見つけるのに少し時間がかかりましたが、非常にシンプルで、おそらく論理的でさえあることが判明しました:background.jsからhttpリクエストを作成し、その結果をページに転送することができました。
アクション中のプラグイン操作
参照資料
ReSharperの最も簡単なプラグインを作成しています-ReSharperの作成を開始した記事です
Find.By Chrome-Google Chromeのプラグイン
Find.By resharper -ReSharperのプラグイン
Find.By -githubプロジェクトリポジトリ