2016-05-21 52 views
1

我想打開一個新選項卡並關閉Selenium中的第一個選項卡。無法在Selenium中發送密鑰C#

所以,我使用SendKeys方法來做到這一點。

但我的問題是,當我打開新標籤時,我無法繼續使用SendKeys方法切換到我的第一個標籤並關閉當前標籤。 進入while循環時,SendKeysExecuteJS都不起作用。

我試着用這段JavaScript代碼:

browser.ExecuteJS("window.close();");

,但它也不能正常工作。

我的代碼是這樣的:

IWebElement body = browser.FindElementByTagName("body"); 
//browser.ExecuteJS("window.open();"); 
body.SendKeys(OpenQA.Selenium.Keys.Control + 't'); 
browser.DeleteAllCookies(); 
Thread.Sleep(50); 
while (browser.GetWindowNum() > 1) 
{ 
    body.SendKeys(OpenQA.Selenium.Keys.Control + OpenQA.Selenium.Keys.Tab); 
    body.SendKeys(OpenQA.Selenium.Keys.Control + 'w'); 
    //browser.ExecuteJS("window.close();"); 
    _tmExcute = DateTime.Now; 
} 
browser.GoToUrl(link); 
browser.WaitForPageToLoad(); 

我使用的方法GetWindowNum()檢查標籤的數量超過1 這裏是我的代碼來檢查在瀏覽器標籤的數量:

public int GetWindowNum() 
{ 
    return wd.WindowHandles.Count; 
} 
+0

您是否驗證過進入循環的條件是否滿足? –

+0

@ ext0是的,條件將爲真,它進入循環,但while循環中的所有代碼都不起作用。 – vanloc

回答

2

你可以簡單地切換第一窗口和使用的驅動程序關閉它,WindowHandles

ReadOnlyCollection<string> windowHandles = wd.WindowHandles; 
string firstWindow = windowHandles.ElementAt(0); //first window handle at 0 index 

foreach (string handle in windowHandles) { //Gets the new window handle 
    if(handle == firstWindow) { 
    wd.switchTo().window(handle); // switch focus of WebDriver to the first window 
    wd.close(); //close that window  
    break; 
    } 
}