1

私が使用しています:Selenium C#でChromeのタブを切り替えるにはどうすればよいですか?

  • クローム55.0.2
  • セレンをChromeDriverとwebdriverを3.0.1
  • のC#4.6.1(VS2015コミュニティ版)

私は、オートメーションコードを書いていていますChromeを開き、タブを開き、メインページのURLに移動します。このメインページには、セカンダリページURLを生成するために解析する情報があります。私の問題は、セカンダリページが読み込まれた後にメインページタブに戻るコードを書くことができず、メインページから離れないコードを書くことができないことです。 、URLに移動Chromeを持って、私はこの二次ページのURLを生成した後、私は別のタブを開きたいctrl-click

のように振る舞う -

オプション#1は:私は私が追求しています2つのオプションが説明しますChromeのメインページタブを離れることはありません。これはリンク上のctrl-clickに似ています。

オプション#2 - 私も解決策に満足するでしょう

(Chromeでタブ1に切り替える)ctrl-1のように振る舞い、新しいクロームタブで、二次ページのURLをナビゲートし、ロードした後、オートメーションはChromeのメインページタブに戻ります。これは、キーボードに「ctrl-1」と入力するのと同じですが、Chromeにはフォーカスがあります。

オプション#3 - 他に何か?

新しい技術レイヤーを導入することなく、私が探しているものを達成する他のソリューションでも満足できます。

いくつかの背景情報は、 - ナビゲーション

私が最初に以下の方法を試してみましたが、それはメインページと同じクローム]タブで生成されたURLを開くので、それは私の要件を失敗します。

Session.Driver.Navigate().GoToUrl(generatedUrl); 

Chromeの新しいタブでURLを開くための「直接的な」C#\ Chrome \ WebDriverコマンドは見つかりませんでした。現在のタブは常に使用されます。

新しいタブでURLを開くjavascriptを使用してコードを見つけることができました。

// open a new tab and navigate to generated url: 
IJavaScriptExecutor jscript = Session.Driver as IJavaScriptExecutor; 
jscript.ExecuteScript(string.Format("window.open('{0}', '_blank');", generatedUrl)); 

JavaScriptを実行すると、セカンダリページが開き、Chromeのアクティブなタブになります。ここでは、バックChromeのメインページのタブに移動し、私の試みです:もちろんの

私の試み

私はなど、タブを切り替えるには多くの方法を試してみましたここで彼らは、すべての障害です:

試み#1:SwitchTo()

私はSession.Driver.WindowHandlesを使用して各ウィンドウハンドルにアクセスできるようにしています。次のコマンドをデバッグすると、最初のウィンドウハンドルが実際にメインページであることがわかります。ただし、コマンドは何もしません。タブは変更されません。クロムは、セカンダリページ\タブに注目し続けます。また、エラーメッセージも表示されません。私がオンラインで読んだことから、このコマンドはタブを切り替えることになっていました。

Session.Driver.SwitchTo().Window(Session.Driver.WindowHandles.First()); 

試み#2:キーを送信する - それは働いていた場合のアクション

このアプローチは、本当に素晴らしいことです。繰り返しになりますが、次のコードは影響を受けず、Chromeはセカンダリページ\タブにフォーカスしています。また、エラーメッセージも表示されません。

Actions action = new Actions(Session.Driver); 
    action.SendKeys(Keys.Control + "1").Build().Perform(); 

土壇場の努力として、私は現在、私は、タブを切り替えることIJavaScriptExecutorで使用できるJavaScriptのコマンドを探していないのです - これまでのところ運を。

+0

シナリオを複製しました。なぜあなたのケースで 'SwitchTo()'がうまくいかなかったのか分かりません。しかし、これは私のために働いた。 "((IJavaScriptExecutor)ドライバ).ExecuteScript(" window.open( '_ blank'、 'tab2'); ");' driver.SwitchTo()。Window( "tab2"); '。 – Gokul

答えて

2

私は現在、IJavaScriptExecutorでタブを切り替えるために使用できるjavascriptコマンドを探しています。これまでのところ運がありません。

JavaScriptを使用してタブを切り替えるトリックを提供しています。これは完璧な解決策ではありませんが、代わりの解決策として使用できます。あなたに試してみてください: -

//Firstly try to switch window as you're doing 
Session.Driver.SwitchTo().Window(Session.Driver.WindowHandles.First()); 

//Now execute a script which would popup the alert box on current window 
IJavaScriptExecutor jscript = Session.Driver as IJavaScriptExecutor; 
jscript.ExecuteScript("alert('Switch tab')"); 

//Now you can see alert would focused on desired tab 
//Now you can accept this alert and do further steps on this tab 
IAlert alert = Session.Driver.SwitchTo().Alert(); 
alert.Accept(); 

: - アラートを受け入れるようにしようと警告を見つけることができないときに、アラート例外を取得している場合は、あなたがJavaScriptのトリガと警告ボックスオープンするまで待つ必要があります。

+2

それはうまくいきました...エレガントではありませんが、間違いなく働きました。ありがとうございました。 – sapbucket

関連する問題