16

テストでリンクをクリックすると、新しいタブが開きます。次に、ChromeDriverにそのタブに焦点を合わせてもらいたい。次のコードを試して、Ctrl+Tabショートカットを使用してChromeDriverでタブを変更できるようにしました。

Actions builder = new Actions(driver);
builder.KeyDown(Keys.Control).KeyDown(Keys.Tab).KeyUp(Keys.Tab).KeyUp(Keys.Control);//switch tabs
IAction switchTabs = builder.Build();
switchTabs.Perform();

ただし、これにより次の例外がスローされます。

ekmLiveChat.tests.UITests.EndToEndTest.EndToEnd:
System.ArgumentException : key must be a modifier key (Keys.Shift, Keys.Control, or Keys.Alt)
Parameter name: key

ChromeDriverを使用してタブを切り替える方法はありますか?

4

5 に答える 5

19

あなたの投稿への私のコメントで述べたように、Chromeドライバーがウィンドウを処理するのと同じ方法でタブを処理するかどうかはわかりません。

このコードはFirefoxで新しいウィンドウを開くときに機能するので、うまくいけば、あなたの場合にも機能します。

public void SwitchToWindow(Expression<Func<IWebDriver, bool>> predicateExp)
{
    var predicate = predicateExp.Compile();
    foreach (var handle in driver.WindowHandles)
    {
        driver.SwitchTo().Window(handle);
        if (predicate(driver))
        {
            return;
        }
    }

    throw new ArgumentException(string.Format("Unable to find window with condition: '{0}'", predicateExp.Body));
}

SwitchToWindow(driver => driver.Title == "Title of your new tab");

(この回答のコードを編集してもエラーが発生しなかったことを願っています...)

Chromeが新しいタブを開く前に、新しいタブを探し始めないように注意してください:)

于 2012-05-11T11:28:52.107 に答える
19

これは私のために働いたものです:

var popup = driver.WindowHandles[1]; // handler for the new tab
Assert.IsTrue(!string.IsNullOrEmpty(popup)); // tab was opened
Assert.AreEqual(driver.SwitchTo().Window(popup).Url, "http://blah"); // url is OK  
driver.SwitchTo().Window(driver.WindowHandles[1]).Close(); // close the tab
driver.SwitchTo().Window(driver.WindowHandles[0]); // get back to the main window
于 2013-05-29T14:34:44.357 に答える
7

私のコードでは、ボタンをクリックしてタブを開き(すでに新しいタブにあるので、その新しいタブに移動するために何かをする必要はありません)、これを実行して新しいタブを認識し、機能します。

driver.SwitchTo().Window(driver.WindowHandles.Last());
于 2019-03-12T18:19:31.390 に答える
1

これとの長い戦いの後、私はこれをクロームドライバーで動作させることができました。警告メッセージは表示されませんが、タブが前面に表示され、acceptはすぐに閉じます。

//Rotate Tabs
seleniumDriver.SwitchTo().Window(seleniumDriver.WindowHandles[currentUrlIndex]);
IJavaScriptExecutor jscript = seleniumDriver as IJavaScriptExecutor;
jscript.ExecuteScript("alert('Focus')");
seleniumDriver.SwitchTo().Alert().Accept();
于 2017-04-07T21:17:17.997 に答える
0

C#では、以下の行を使用して2つのタブを切り替えました。

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;   
js.ExecuteScript("window.open();");   
IList<string> tabs = new List<string>(driver.WindowHandles);    
driver.SwitchTo().Window(tabs[1]);
driver.Navigate().GoToUrl("http://www.google.com");
于 2017-09-06T12:31:05.163 に答える