web-dev-qa-db-ja.com

iFrameから親フレームに切り替え、Selenium Webdriverを使用して親フレーム内の要素を検索します。 C#

シナリオ:-iFrameテキストエディターとページ内のボタンを備えたページがあります。 -親フレームからiFrameに切り替えて、テキストエディターの本体から読み取ります。-テキストエディターの本体から読み取った後、ページの親フレームのボタンをクリックします。 -このため、次のステートメントを使用して、iFrameから親フレームに切り替えようとしました:webDriver.SwitchTo()。DefaultContent(); -しかし、それでも親フレームにあるボタン要素を見つけることができません。

私はあなたの助けに感謝します!ありがとう

17
Stand4Unborn

それはあなたの応答の人のためのものです。解決しました!

ソリューション:

  • 私はwebDriver.SwitchTo().DefaultContent();を使用していますが、webDriverをページの一番上のウィンドウに切り替えます。 [以前はこのウィンドウでボタン要素を探していたため、ボタンがページのメインフレームに配置されていたため、ボタン要素を見つけることができませんでした]

  • メインウィンドウに切り替えた後、webDriverをページのメインフレームに再度切り替えました。このメインフレームにはボタン要素がありました。このようにして、ボタン要素を見つけることができました。そして、これは問題を解決しました!

したがって、最終的なコードにはwebDriver.SwitchTo().DefaultContent();がありませんが、代わりに次のコードが含まれています。

    _webDriver.SwitchTo().Window(windowHandle);
    _webDriver.SwitchTo().Frame("mainFrame");

注:上記のコードのwindowHandleは、ページの一番上のウィンドウのハンドルです。値はブラウザによって変わるかもしれませんが、確かではありません。

15
Stand4Unborn

私は同様の問題で苦労していて、Window Handleによって元に戻すことができることがわかりました。

string currentWindow = Driver.CurrentWindowHandle;
// switch to frame and do stuff..
Driver.SwitchTo().Window(currentWindow); // switch back
7
DevDave

私の場合、次のコードはうまくいきました:

driver.switchTo().parentFrame();
7