5

C# で最新バージョンの webdriver を使用してウィンドウを切り替えようとすると、スタックします。

ボタンをクリックすると、新しいウィンドウが開きます。

このボタンのターゲット コードは次のとおりです。

window.open(uri, "DisplayPage", " width=1200, scrollbars=yes , resizable = yes ,   toolbar =  no , menubar =  no");

以下のコードを使用して、新しいウィンドウをターゲットにしています

   string BaseWindow = _driver.CurrentWindowHandle;

   ReadOnlyCollection<string> handles = _driver.WindowHandles;

    foreach (string handle in handles)
    {

        if (handle != BaseWindow)
        {
            _driver.SwitchTo().Window(handle).Title.Equals("DisplayPage");

        }
    }
}

上記のように、ベース ウィンドウからターゲット タイトルを使用するウィンドウに切り替えています。これはうまくいかないようです。

その後、開いたウィンドウのタイトルが異なっていることに気付きました。それは「表示 - 取引ページ」でした。

次に、コードをこれに変更しました

 string BaseWindow = _driver.CurrentWindowHandle;

       ReadOnlyCollection<string> handles = _driver.WindowHandles;

        foreach (string handle in handles)
        {

            if (handle != BaseWindow)
            {
                _driver.SwitchTo().Window(handle).Title.Equals("Display - Transaction Page");

            }
        }
    }

まだ運がありません。

興味深いことに、「ウィンドウが見つかりません」というエラーは表示されません。

問題は、新しく開いたページの要素をクリックしようとすると、新しく開いたウィンドウが対象になっていないことを意味する NoSuchElementException が発生することです。

何か案は?

よろしく、

持っています

4

2 に答える 2

2

ウィンドウがウィンドウに変更されたら、ループを解除する必要があります。そうしないと、常に最後に開いたウィンドウに切り替わります。

foreach (string handle in handles) {
 if (handle != BaseWindow) {
  if(_driver.SwitchTo().Window(handle).Title.Equals("Display - Transaction Page")) 
    break;
  }
}

Containsの代わりに試してみることができequalます。ウィンドウ検索が簡単になります。

_driver.SwitchTo().Window(handle).Title.Contains("Display"); 
于 2012-06-12T07:07:52.297 に答える
1

自分で答えを見つけましたが、C# でウィンドウ間の切り替えを処理する別の方法があります。

// initiate webdriver
IWebDriver driver = new FirefoxDriver();

//perform some action to open a new window. Like clicking a link.
driver.FindElement(By.Id("btnId")).Click();

//switch to new window.
driver.SwitchTo().Window(driver.WindowHandles.Last());

//if you want to switch back to your first window
driver.SwitchTo().Window(driver.WindowHandles.First());
于 2016-02-19T11:57:53.500 に答える