方案:我已經配置電網2現在多個測試並行運行。當測試開始時,打開瀏覽器窗口(僅打開一個選項卡)並在其中填充一些控件。之後,我打開另一個選項卡(在同一個瀏覽器窗口中),切換到它並在其中填充一些控件。
第二個選項卡中填充數據之前,有需要完成以下步驟:
1.打開新的標籤頁通過調用SendKeys(Keys.Ctrl + 't')
2.切換到第二個選項卡等待第二個選項卡的手柄將被添加到之前駕駛員實例。
如果手柄加入到驅動程序實例,然後切換到它,否則4.
4.重複操作2和3,直到超時爲止。
如何打開broswer的標籤遠程機器上
問題: 調試時,我注意到,在打開一個新標籤時,它的手柄沒有添加到driver.WindowHandles
。這意味着,如果不檢查句柄是否添加並嘗試切換到該句柄,則會拋出異常。在我的情況下,它會切換到不正確的標籤,因爲我打電話給driver.SwitchTo().Window(handles[handles.Count() -1]);
。所以我創建了等待句柄添加的方法。
問題是,在多個員工中運行時,它總是超時。我改變了timeout
,但沒有任何變化。新打開的選項卡的句柄未添加到WindowHandles
。如果我是而不是並行運行,那麼它按預期工作。
// previousTabCount- browser's tab count before opening new one
public void WaitForTabToOpenAndSwtich(int previousTabCount)
{
int currentTabCount = driver.WindowHandles.Count();
int count = 0;
while(currentTabCount == previousTabCount)
{
// after 20 seconds throw exception
if(count > 20)
throw new Exception("The newly opened tab's handle was not added.");
// update current tab count
currentTabCount = driver.WindowHandles.Count();
count++;
Thread.Sleep(1000);
}
var handles = driver.WindowHandles;
driver.SwitchTo().Window(handles[handles.Count() -1]);
}
除非測試的設計從一開始就並行運行,否則我不會感到驚訝,如果它們沒有一些工作並行運行。驅動程序實例是否在所有測試之間共享?如果一個測試添加標籤而另一個測試添加標籤,他們可能會感到困惑。 –
謝謝你的回覆@Sam Holder。是的,我正在使用共享的公共靜態驅動程序實例。但我如何理解Grid 2將測試分離爲工人,每個工人都有自己的驅動實例,並且只在該工人內共享。該工作人員內部的所有測試都是同步運行的,所以它不應該是一個問題。我可能是錯的,但這是我理解它是如何工作的。 – Edgar