2014-03-19 46 views
1

使用webdriver 2.40.0(從金塊包安裝)並在C#中編寫代碼我是 - 打開我公司網站的鏈接,生成證書錯誤頁面 - 點擊覆蓋鏈接元素讓我繼續到網站 - 點擊該頁面上的一個輸入按鈕,該頁面生成一個彈出窗口,其上也有一個證書錯誤頁面 我的問題是當我嘗試選擇流行窗口一「noSuchWindowException」被拋出,代碼:webdriver無法點擊與證書錯誤頁面彈出窗口

namespace webDriverDemo 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string setURL = "xxxxx"; 

      IWebDriver driver = new InternetExplorerDriver(@"C:\Drivers"); 
      driver.Url = setURL; 
      String loginPage = driver.CurrentWindowHandle; 

      var securityLine = driver.FindElement(By.Id("overridelink")); 
      if (!securityLine.Equals(null)) 
      { 
       securityLine.Click(); 
      } 

      var enterBtn = driver.FindElement(By.Id("EnterButton")); 
      enterBtn.Click(); 

      //Select the pop up window 


      driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()"); 

      driver.SwitchTo().Window("xxxx"); 

我已經試過:

driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()")

String riskPage = driver.CurrentWindowHandle;

,並切換到該窗口中,我也試着

driver.SwitchTo().Window();

,但我認爲問題是,我不能到達證書錯誤頁面的窗口名稱,並且無法選擇並在該頁面上添加元素並嘗試保存它作爲一個單獨的句柄。真的需要幫助!

回答

0

一旦您執行了啓動彈出窗口的動作enterBtn.Click();,您需要將上下文切換到新窗口(使用它的窗口句柄而不是標題)以便與其交互。

您可以從driver.WindowHandles列表中獲取彈出窗口的句柄。

var riskPageHandle = driver.WindowHandles.FirstOrDefault(hwnd => hwnd != loginPageWindowHandle); 

if(riskPageHandle ==null) 
{ 
    //popup not found, log error or handle 
} 
else 
{ 
    //switch to the popup 
    driver.SwitchTo().Window(riskPageHandle); 
    Console.WriteLine("Popup window title is : " + driver.Title); 

    //now accept the certificate error (your code, I haven't tried it) 
    driver.Navigate().GoToUrl("javascript:document.getElementById('overridelink').click()"); 

} 
+0

謝謝!我已經使用://選擇彈出窗口 var riskPageHandle = driver.WindowHandles.FirstOrDefault(hwnd => hwnd!= loginPage); driver.SwitchTo()。Window(riskPageHandle); Console.WriteLine(「彈出窗口標題是:」+ driver.Title); var overRde = driver.FindElement(By.Id(「overridelink」)); overRde.Click();作品的魅力:) :) – user3438744

+0

你能解釋一下var riskPageHandle = driver.WindowHandles.FirstOrDefault(hwnd => hwnd!= loginPageWindowHandle); ??我不是測試人員,我知道這是獲取並保存彈出窗口的窗口句柄,但不知道如何? – user3438744

+0

這是[LINQ FirstOrDefault方法](http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b)語法。它發現列表中的第一個窗口句柄不是您的登錄頁面窗口句柄(您之前保存的)。由於只有2個打開的窗口,第二個窗口句柄屬於彈出窗口。 – Faiz

相關問題