0
を抽出しようとしているときに、私はすべてのネストされたのiframeのSRC属性を取得しようとしていますが、私は古い参照exception.Hereを取得しています古い要素参照の例外を取得すると、コードは、ネストされたのiframeのsrc属性
public class findAllSources {
ArrayList<String> sources = new ArrayList<String>();
@Test
public void iframeTest() {
System.setProperty("webdriver.chrome.driver", "path to chrome driver");
ChromeDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://www.engadget.com/");
List<WebElement> allFrames = driver.findElements(By.xpath("//iframe[not(contains(@style,'display:none'))]"));
for (WebElement frame : allFrames) {
if(frame.isDisplayed()){
System.out.println("We clicked frame "+frame);
System.out.println(" with a source "+frame.getAttribute("src"));
sources.add(frame.getAttribute("src"));
driver.switchTo().frame(frame);
findDeeperFrames(driver);
driver.switchTo().defaultContent();
}
}
}
public void findDeeperFrames(ChromeDriver driver){
List<WebElement> deeperFrames = driver.findElements(By.xpath("//iframe[not(contains(@style,'display:none'))]"));
for (WebElement nframe: deeperFrames) {
if (nframe.isDisplayed()){
if (!nframe.getAttribute("src").isEmpty()){
sources.add(nframe.getAttribute("src"));
System.out.println("Nested source "+ nframe.getAttribute("src"));}
driver.switchTo().frame(nframe);
findDeeperFrames(driver);
//getting out of the frame
driver.switchTo().defaultContent();
}
}
}
}
は、いずれかがあるのさ私の目標を達成するための他のアプローチですか?
私はあなたが別のフレームorwindowにスイッチを試してみて、その後、後にするとき、あまりにも –
古い例外があり、このコードで同じエラーが出ます元のウィンドウに戻ります。切り替え前に以前に保存されていたWeb要素を使用しようとすると、その行がそのエラーをスローします。 – kushal
if(nframe.isDisplayed()){} –