web-dev-qa-db-ja.com

Selenium / Protractor Javascriptで新しいウィンドウに切り替える

「ログイン」ボタンをクリックした後に表示される新しい「ポップアップ」ウィンドウを取得する方法についてのヘルプを探しています。

ウィンドウが表示されているときに到達できますが、ウィンドウの「ハンドル」を取得するために現在使用しているコードが適切に機能しているとは思いません。私のページ内で分度器を使用しているという点で私の状況は少し異なりますが、新しいウィンドウは表示されませんangularベースであるため、私がいる間にSelenium WebDriverのみを使用するように切り替える必要がありますそのウィンドウ(このアプローチで問題が発生する可能性があるかどうかは誰でも知っていますか?)

以下は、Seleniumドライバーの作成に使用しているコードスニペットと、ポップアップしている新しいウィンドウの「ハンドルへの切り替え/ハンドルの取得」を試みるコードスニペットです。ページでフォームを見つけようとするコードに「No Such Element」エラーが表示され続けるため、正しく機能しないことがわかっています。

    // Create Selenium webdriver / driver
    var webdriver = require('Selenium-webdriver');

    var driver = new webdriver.Builder().
        withCapabilities(webdriver.Capabilities.chrome()).
        build();

  // Now make sure that the new window is popping up and we are navigating   correctly to it
      var handlePromise = browser.driver.getAllWindowHandles();
      handlePromise.then(function (handles) {
        // parentHandle = handles[0];
        var popUpHandle = handles[1];

        // Change to new handle
        browser.driver.switchTo().window(popUpHandle);

        var popUpHandleFinal = browser.driver.getWindowHandle();
        expect(popUpHandleFinal).toEqual(popUpHandle);
    });

これに関するいくつかのこと:

  1. 「browser.driver.switchTo()。window(popUpHandle)」行の「browser」を削除すると、「driver.switchTo()。window(popUpHandle)」と表示され、「UnknownError」と表示されるエラーメッセージが表示されます。 :不明なエラー:「名前」は空でない文字列である必要があります "これでいくつかの検索を行った後、それはドライバの" switchTo() "メソッドをnullにすることができないためです。このエラーは、上記のコードを使用しただけで解消されます。

  2. 分度器(グローバル「ブラウザー」変数)を使用する必要があるか、ウィンドウの取得方法としてこの前に設定したストレート「ドライバー」(セレン)を使用する必要があるかどうか、100%わかりません。

ご協力ありがとうございました

9
parchambeau

最新バージョンのProtractor(v2.2)では、現在表示されているウィンドウの配列を返す分度器ウィンドウハンドルの使用に問題はありません。 P.Tが指摘したように、別のドライバーインスタンスを呼び出す必要はありませんが、browserグローバル変数は機能します。ポップアップを呼び出すウィンドウは0の配列インデックスを持ち、ポップアップウィンドウは1の配列インデックスを持ちます。以下は、ポップアップウィンドウに切り替えて作業するサンプルです。

browser.getAllWindowHandles().then(function(handles){
    browser.switchTo().window(handles[1]).then(function(){
        //do your stuff on the pop up window
    });
});

お役に立てれば。

14
Girish Sortur

ポップアップウィンドウを開くためにリンクまたはボタンをクリックしている場合は、browser.sleep(ms)を使用して、クリック後に待機を追加します。

これは私にとってはうまくいき、「ハンドルパラメータがありません」というエラーを取り除きました

element(by.className("name")).click();
browser.sleep(10000); //This line is important
var winHandles=browser.getAllWindowHandles();
winHandles.then(function(handles) 
{
    var parentWindow=handles[0];
    var popUpWindow=handles[1];
    browser.switchTo().window(popUpWindow);
    browser.switchTo().window(parentWindow);
})
4
Ajay Patil

https:// urlを呼び出して、再度http:// urlにリダイレクトすると、セキュリティ上の問題により、このポップアップが表示されます。

1-https://またはhttp://で両方のアプリケーションを設定する必要があります

0
Manas