我有一個編碼的UI測試方法:BrowserWindow.Uri屬性時.NavigateToUrl(URI URI)被稱爲
public void MyTestMethod()
{
string baseUrl = "www.google.com";
GlobalVariable.browser = BrowserWindow.Launch(new System.Uri(baseUrl));
GlobalVariable.browser.NavigateToUrl(new System.Uri(baseUrl + "/images"));
string expected = baseUrl + "/images";
Assert.AreEqual(expected, GlobalVariable.browser.Uri);
}
然而,在GlobalVariable.browser.Uri
斷言的時間價值仍然指向到www .google.com,即使瀏覽器已成功導航到預期。我試過設置一個Playback.Wait()
以確保我沒有太早斷言。奇怪的是,這隻發生在一個或兩個開發環境(其他人顯示GlobalVariable.browser.Uri
的正確值),導致我相信有一些環境變量而不是代碼問題。
此外,如果,代替靜態設置和更新GlobalVariable.browser對象,我們每次調用一個函數get
我們稱之爲對象(像這樣:
private BrowserWindow _browser;
public BrowserWindow browser
{
get
{
BrowserWindow currentWindow = BrowserWindow.FromProcess(_browser.Process);
return currentWindow;
}
set
{
_browser = value;
return _browser;
}
}
),則該對象是基於創建在系統過程中,並具有正確的屬性。所以基本上,在我們的初始化方法中創建的BrowserWindow對象在進行時並沒有得到更新,我們必須根據這個過程創建一個新的對象。同樣,這隻發生在一些遠程環境中,而不是在本地設置的開發機器上。我錯過了什麼?
我想我跟着你,這就是爲什麼我認爲這是愚蠢的從BrowserWindow.GetProcess得到一個新的進程()的作品,而只是調用該對象又沒有。除非你建議前者是因爲這是微軟的做法。 – 2014-11-04 00:56:15
是的 - 看起來代碼在內部期望與IE的連接「隨機」不可用或丟棄,並根據需要重新創建連接。因此,您可能會看到基於舊對象的緩存URI;如果重新創建作品,那麼在您需要時重新創建對象似乎不會有太大的傷害。 – PhillipH 2014-11-04 09:17:52