新しいウィンドウに切り替える前に、新しいウィンドウを待つようにしてください。さらに、索引でウィンドウを選択することは信頼性がありません。
この例で新しく開いたウィンドウに切り替わり、最初のフレーム上のコンテキストを設定します。
import org.openqa.selenium.support.ui.WebDriverWait;
WebDriverWait wait = new WebDriverWait(driver, 20);
// get the main window handle
String mainHandle = driver.getWindowHandle();
// wait for a new window and switch to it
driver.switchTo().window(wait.until((WebDriver drv)->{
for (String handle : drv.getWindowHandles()){
if (!handle.equals(mainHandle))
return handle;
}
return null;
}));
// set the context on the first frame
driver.switchTo().frame(0);
をラムダ式なしで新しいウィンドウを待つ:
// wait for a new window and switch to it
driver.switchTo().window(wait.until(new ExpectedCondition<String>() {
@Override
public String apply(WebDriver drv) {
for (String handle : drv.getWindowHandles()){
if (!handle.equals(mainHandle))
return handle;
}
return null;
}
}));
ので、問題の種類あなたはいますか?例外/エラーを記載してください。 –
buttonwithinframeの場合、そのような要素は見つかりませんでした。しかし、私はwebdriverが新しいpage.aに切り替えるのではなく、iframeへの切り替えが簡単だと確信しています。 – Techie