簡體   English   中英

Webdriver,CSharp,C# - 無法在窗口之間切換

[英]Webdriver, CSharp, C# - Cannot switch between windows

我試圖在C#中使用最新版本的webdriver切換窗口時遇到困難。

我有一個基本窗口,當我點擊一個按鈕時,它會打開一個新窗口。

此按鈕的目標代碼如下所示。

window.open(uri, "DisplayPage", " width=1200, scrollbars=yes , resizable = yes ,   toolbar =  no , menubar =  no");

我使用下面提到的代碼來定位新窗口

   string BaseWindow = _driver.CurrentWindowHandle;

   ReadOnlyCollection<string> handles = _driver.WindowHandles;

    foreach (string handle in handles)
    {

        if (handle != BaseWindow)
        {
            _driver.SwitchTo().Window(handle).Title.Equals("DisplayPage");

        }
    }
}

從上面可以看出,我正在使用基本窗口中的目標標題切換到窗口。 這似乎不起作用。

然后我注意到打開的窗口的標題不同,它是“顯示 - 交易頁面”

然后我將代碼修改為此

 string BaseWindow = _driver.CurrentWindowHandle;

       ReadOnlyCollection<string> handles = _driver.WindowHandles;

        foreach (string handle in handles)
        {

            if (handle != BaseWindow)
            {
                _driver.SwitchTo().Window(handle).Title.Equals("Display - Transaction Page");

            }
        }
    }

仍然沒有運氣。

有趣的是,我沒有收到任何錯誤,說“未找到窗口”。

問題是,當我嘗試點擊新打開的頁面上的元素時,我得到一個NoSuchElementException,這意味着新打開的窗口尚未被定位。

有任何想法嗎?

問候,

哈桑

一旦窗口更改為窗口,您應該中斷循環,否則它將始終切換到上次打開的窗口:

foreach (string handle in handles) {
 if (handle != BaseWindow) {
  if(_driver.SwitchTo().Window(handle).Title.Equals("Display - Transaction Page")) 
    break;
  }
}

您可以嘗試使用Contains而不是equal ,它將簡化窗口搜索:

_driver.SwitchTo().Window(handle).Title.Contains("Display"); 

雖然你自己破解了答案,但還有另一種方法來處理C#中窗口之間的切換。

// initiate webdriver
IWebDriver driver = new FirefoxDriver();

//perform some action to open a new window. Like clicking a link.
driver.FindElement(By.Id("btnId")).Click();

//switch to new window.
driver.SwitchTo().Window(driver.WindowHandles.Last());

//if you want to switch back to your first window
driver.SwitchTo().Window(driver.WindowHandles.First());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM