分度器またはWebDriverを介してタブを物理的に閉じる方法はありますか?
タブを切り替える をプログラムで行う方法は知っているが、アクティブなタブが前面に表示されないためです。画面キャストを表示すると、アクティブなタブではなく、移動したタブが表示されるため、SauceLabsで実行するE2Eテストで何が行われているのかを常に確認できません。
私はこれについて間違って行っていますか?
it('should do something in the previous tab', function(done) {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[0]);
// do something
expect(something).toEqual(thisThing);
done();
});
});
以下を試すことができます:
新しく開いたタブに切り替えます。現在のウィンドウ(この場合は新しいタブ)を閉じます。最初のウィンドウに戻ります。
browser.getAllWindowHandles().then(function (handles) {
browser.driver.switchTo().window(handles[1]);
browser.driver.close();
browser.driver.switchTo().window(handles[0]);
});
まず、Seleniumは、ブラウザのタブを操作するための信頼できるクロスブラウザAPIを提供していません。タブを開いたり閉じたりする一般的な方法は(信頼性はそれほど高くありませんが)、Chromeのブラウザーショートカットを呼び出すことです:
CTRL
/COMMAND
+ T
CTRL
/COMMAND
+ W
分度器で、body
要素を見つけ、それに「キーを送信」します。
_var body = element(by.tagName("body"));
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "t"))
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "w"))
_
または、browser.actions()
を使用:
_browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('t').perform();
browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('w').perform();
_
また、新しいタブを開くには、面白いハックがあります(導入された here )。これは基本的にページに新しいa
要素を挿入し、click
マウスイベントを呼び出します。 :
_function openNewTab (url) {
return browser.driver.executeScript(function(url) {(
function(a, url){
document.body.appendChild(a);
a.setAttribute('href', url);
a.dispatchEvent((function(e){
e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
return e;
}(document.createEvent('MouseEvents'))))
}(document.createElement('a'), url)
);
}, url)
};
_
window.close()
関数もありますが、window.open()
( reference )で開かなかった場合、タブは閉じません。つまり、これが手動で開いたタブである場合、window.open() -> window.close()
の助けを借りてbrowser.executeScript()
アプローチを使用できます。
Sakshiの答えのC#バージョン:
var tabs = driver.WindowHandles;
if (tabs.Count > 1)
{
driver.SwitchTo().Window(tabs[1]);
driver.Close();
driver.SwitchTo().Window(tabs[0]);
}
最初のタブを除くすべてのタブを閉じて、最初のタブに切り替えます。
var tabs = driver.WindowHandles; //
foreach (var tab in tabs)
{
// "tab" is a string like "CDwindow-6E793DA3E15E2AB5D6AE36A05344C68"
if (tabs[0] != tab)
{
driver.SwitchTo().Window(tab);
driver.Close();
}
}
driver.SwitchTab(tabs[0]); // Switch to first tab
driver.SwitchTo().DefaultContent(); // Switch to default frame
最後の2行に注意してください。OpenQA.Selenium.NoSuchWindowException: no such window: target window already closed from unknown error: web view not found
などのエラーを回避する必要があります
_driver.close
_を使用して、アクティブなタブdriver.SwitchTo().Window(m_driver.WindowHandles.First());
または他の使用可能なタブに切り替えることができます