2015-04-07 19 views
19

Có cách nào để đóng một tab thông qua Protractor hoặc WebDriver không?Có cách nào để đóng tab trong WebDriver hoặc Thước đo góc không?

Tôi hỏi vì mặc dù tôi biết cách switch tabs theo lập trình nhưng không đưa tab hoạt động lên nền trước. Tôi không thể luôn luôn biết những gì đang xảy ra trong các bài kiểm tra E2E chạy trên SauceLabs bởi vì khi tôi xem màn hình, nó hiển thị tab mà tôi đã điều hướng khỏi, không phải là hoạt động.

Tôi có nói về điều này không chính xác không?

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(); 
    }); 
}); 

Trả lời

39

Bạn có thể thử cách sau:

Chuyển sang tab mới mở. Đóng các cửa sổ hiện tại (trong trường hợp này là tab mới). Chuyển về cửa sổ đầu tiên.

browser.getAllWindowHandles().then(function (handles) { 
    browser.driver.switchTo().window(handles[1]); 
    browser.driver.close(); 
    browser.driver.switchTo().window(handles[0]); 
}); 
+0

'close()' đóng tab cho tôi khi tôi mở một hình ảnh. Tuy nhiên, không chắc chắn! –

+0

@alecxe điều này rất hữu ích đối với tôi. – Aaron

+0

@Aaron tốt để biết, là nó làm việc cho cả firefox và chrome? Cảm ơn. – alecxe

8

Trước hết, selen không không cung cấp một API qua trình duyệt đáng tin cậy để làm việc với các tab trình duyệt. Một cách tiếp cận chung để mở hoặc đóng một tab (chắc chắn, không hoàn toàn đáng tin cậy) là để gọi phím tắt trình duyệt, cho Chrome:

  • mở tab: CTRL/COMMAND + T
  • tab gần: CTRL/COMMAND + W

Trong thước đo góc, tìm các phần tử body và "gửi phím" với nó:

var body = element(by.tagName("body")); 
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "t")) 
body.sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "w")) 
.210

Hoặc, sử dụng browser.actions():

browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('t').perform(); 
browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('w').perform(); 

Ngoài ra, để mở một tab mới, có một hack thú vị (giới thiệu here), mà về cơ bản sẽ tiêm nhiễm một yếu tố mới a vào trang và gọi click chuột sự kiện:

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) 
}; 

Ngoài ra còn có window.close() vui vẻ ction, nhưng nó sẽ không đóng tab nếu nó không được mở qua window.open() (reference). Nói cách khác, nếu đây là tab bạn mở theo cách thủ công, thì bạn có thể sử dụng phương pháp window.open() -> window.close() với sự trợ giúp của browser.executeScript().

+0

bằng cách sử dụng 'window.open()' bạn có biết cách mở tham chiếu đến tab hiện tại đã được mở trước đó bằng cách sử dụng 'window.open()' không? Tôi có một phần mở rộng chrome chạy trong tab thứ 2 để nắm bắt các tiêu đề HTTP và tôi không thể tìm ra cách để quay trở lại tab đó để kiểm tra xem chúng có bị hỏng hay không. – luker02

-1

Tôi đang sử dụng lệnh dưới đây để đóng tab hiện tại sau khi mở liên kết trong tab mới

Instance.Driver2.SwitchTo().Window(Instance.Driver2.WindowHandles[1]).Close(); 

Sau đó, bạn có thể chuyển sang tab cuối cùng bởi sự cố lệnh:

Instance.Driver2.SwitchTo().Window(Instance.Driver2.WindowHandles[0]); 
2

C# Phiên bản câu trả lời của Sakshi:

var tabs = driver.WindowHandles; 
    if (tabs.Count > 1) 
    { 
     driver.SwitchTo().Window(tabs[1]); 
     driver.Close(); 
     driver.SwitchTo().Window(tabs[0]); 
    } 
0

Bạn có thể sử dụng driver.close và sau đó chuyển sang tab hoạt động driver.SwitchTo().Window(m_driver.WindowHandles.First()); hoặc bất kỳ một tab có sẵn

1

Đóng tất cả các tab ngoại trừ người đầu tiên và chuyển sang tab đầu tiên: chú ý

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 

Pay kéo dài hai dòng, họ cần phải tránh các lỗi như OpenQA.Selenium.NoSuchWindowException: no such window: target window already closed from unknown error: web view not found

Các vấn đề liên quan