2016-05-11 10 views
0

私のコードでいくつかの同期の問題に直面しているようです。 処理中に、新しいウィンドウを開くボタンをクリックしています。 私は次のコードで新しいウィンドウをスウィッチしています。セレンは新しい開かれたウィンドウを認識しません - セレンC#

_webdriver.SwitchTo().Window(_webdriver.WindowHandles.Last();
その後、私は次のウィンドウ内のフィールドにデータを挿入しています。 問題は、「次のウィンドウ」のオブジェクトが見つからないことがあることです。 「要素を見つけることができません」というエラーが表示されます。 私にとっては同期の問題、つまりDOMの問題のようです。 ので、私が使用して試してみました:

_webdriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

をし、私も試してみました:残念ながら

Thread.Sleep(3000);

、時間のほとんどは問題があることであるように思えますセレンは新しいウィンドウに切り替わりませんでした(d ebugging)。

私はあなたのお手伝いをさせていただきます。

答えて

0

次の2つのウィンドウを待ってから、新しいものにコンテキストを設定できます。

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20)); 

// wait for 2 windows 
ReadOnlyCollection<String> handles = null; 
wait.Until((d) => (handles = driver.WindowHandles).Count > 1); 

// set the context on the new window 
driver.SwitchTo().Window(handles[handles.IndexOf(driver.CurrentWindowHandle)^1]); 
0

これはC#でどのように行われているのかわかりませんが、セレンは同じですが、ループのC#構文を使用するだけです。

//Switch to newly opened window (JAVA) 
    for(String winHandle : driver.getWindowHandles()){ 
     driver.switchTo().window(winHandle); 
    } 

これは私がJavaで行う方法です。あなたはdriver.getWindowHandles()と同じメソッドをC#で取得しますが、これはセレンメソッドなので間違っていない場合。 これはあなたに役立つことを願っています。

関連する問題