タブ開口部のさまざまなピットに変更されたSeleniumFirefoxブラウザ



Selenium Firefox Browser Modified Various Pits Tab Opening



要求する:

今日、友人が茎に遭遇しました。セレンがFirefoxを使用して複数のWebページを開くと、Firefoxは常に新しいウィンドウの形式で開き、友人の要求はタブの形式で新しいページを開くことでした。



1.新しいウィンドウモード:



2.新しいタブページモード(IEでは新しいタブと呼ばれます):

もちろん、セレンの観点からは、ブラウザが新しいウィンドウを使用するか新しいラベルを使用するかに関係なく、WebDriver操作要素には影響せず、ハンドルを切り替えるだけです。現在の要求は、新しいウィンドウで開きたくないということです。複数のウィンドウを開くのは面倒で面倒なので、私は乙女座です。この友人がそうであるかどうかはわかりません。



ソリューション

1.最初のポイント:「ブラウザ設定の変更」

次の図のように設定して、タブモードで設定を開きます。

セレンを使用してコードを実行すると、それがまだウィンドウとして開いていることがわかり、セレンによって開始されたFirefoxブラウザーの設定を確認し、「(T)の代わりに新しいタブを作成する必要がある」ことがわかりました。このオプションはキャンセルされます。これは推測できます。WebDriverFirefoxを起動すると、ブラウザの設定がリセットされます。

2. 2番目のポイント:コード設定

アイデアは、セレンがFirefoxを起動したときに新しいウィンドウを開くようにブラウザを設定することです。データをクエリすることにより、browser.link.open_newwindowの値は、新しいウィンドウを開くようにブラウザーを設定する方法です。

  • 値1が現在のウィンドウで開きます
  • 値2、新しいウィンドウモードが開いています
  • 値3、タブとして開かれます

起動時に設定されるコードは次のとおりです(各デフォルトファイルは異なるマシン上で異なるパスを持っていることに注意してください)

String firefoxProfileDir = 'C:\ Users \ Administrator \ AppData \ Roaming \ Mozilla \ Firefox \ Profiles \ vxhj8pmc.default'

FirefoxProfileプロファイル= 新着 FirefoxProfile( 新着 ファイル(firefoxProfileDir))

profile.setPreference( 'browser.link.open_newwindow'、3)

WebDriverドライバー= 新着 FirefoxDriver(プロファイル)

実行後のエラー原因:java.lang.IllegalArgumentException:設定browser.link.open_newwindowをオーバーライドできません:frozen value = 2、requested value = 3、構成の変更は許可されていません。

3. 3番目のポイント:変更Webdriver_prefs.jsonファイル

FirefoxのSeleniumjarが特別な注意を払っていることがわかった情報を引き続き確認します。特定のjsonファイルがあり、Firefoxブラウザーの構成を指定します。org/ openqa / selenium / firefoxの下にwebdriver_prefs.jsonファイルパスがあります。

ファイルを開き、browser.link.open_newwindowの値が2であることを確認します。これは、Firefoxブラウザーが新しいウィンドウで開くことを意味します。ですから、私たちが何をしても、それは無駄です。理由を見つけたら、それを行うことができます。このファイルのbrowser.link.open_newwindow値を3に変更する場合は、タブモードで開きます。

幸い、このファイルはJsonファイルであり、クラスコンパイルファイルではないため、可能な限り変更できます。 jarのサフィックスをzipサフィックスに変更し、ファイルを見つけて3に変更して保存してから、jarのサフィックスに戻します(バックアップすることを忘れないでください。後ろに卵があります)。次に、Eclipseで古いjarパッケージを置き換え、コードを実行し、魔法の発見を行います。Firefoxはタブの形でウィンドウを開き、需要を完全に解決します。

卵が来ています

タブの形で新しいウィンドウを開き、それがブームになったら、ハンドルを大きな穴に切り替え、Firefoxのタブで開きます。開いている数に関係なく、driver.getWindowHandles()メソッドを使用して、Setハンドルのセットを1つだけ取得します。価値はありますが、IEではChromeにこの問題はありません。 2が3によって引き起こされていることを確認するために、バックアップを復元して実行し、これが当てはまることがわかるように、新しいウィンドウで開くと、すべてのハンドルを正しく取得できます。私が乙女座のプロットでそのような大きな問題を知っているという理由だけで、それはかなり満足しているようです。 DuNiangで答えを見つけることは不可能です。壁を越えて理由を見つけました。一般的な説明として、ドライバーはタブ形式で開いたウィンドウを管理できません。見てください https://github.com/SeleniumHQ/selenium/issues/1614

総括する: これはまた真実であり、セレンをデフォルトで設定する必要がある理由2、セレンの場合、新しいウィンドウがFirefoxを開くための最も標準的な方法です。

Baiduの読書: https://yuedu.baidu.com/ebook/82a757ec7e192279168884868762caaedd33baa3