Невозможно найти дочерний элемент iframe, который находится в родительском iframe, через Selenium в Java - PullRequest
0 голосов
/ 06 ноября 2018

Пока что это то, что у меня есть: я переключил кадр на его родительский кадр, а затем на кадр, который я не могу найти:

By frame = By.xpath("//iframe[@class='GenCss_style-Model']");

driver.switchTo().frame(driver.findElement(By.name("documentflowdesk")));
driver.switchTo().frame(driver.findElement(frame));

Так как элемент 'frame' не найден, я получаю эту ошибку:

org.openqa.selenium.NoSuchElementException: невозможно найти элемент

HTML:

<iframe src="about:blank" name="documentflowdesk" class="gwt-Frame-NavigationComponentViewImplResourcesapplicationFrame" id="documentflowdesk" style="position: absolute; left: 0px; top: 0px; visibility: visible; height: 100%;"></iframe>    
#documentflowdesk
<html style="overflow: hidden;">
    <head>...</head>
    <body style="margin: 0px;" class="dragdrop-dropTarget dragdrop-boundary">
    <noscript>...</noscript>
    <div style="position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; bottom: 0px;">
        <div class="css-DeskStyleResources" style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;">
            <div style="position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; bottom: 0px;">
                <div style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;">
                    <div style="position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; bottom: 0px;">
                        <iframe class="GenCss_style-Model" src="/model/?modelId=100&amp;docGroupId=164&amp;connectionPointId=73" style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;"></iframe>

iframe, который я пытаюсь найти, находится внутри нескольких div. Связано ли это с ошибкой? Или есть проблема с тем, как я нахожу свой элемент?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Согласно HTML, когда вы находитесь в родительском фрейме , вам необходимо:

  • Индуцируйте WebDriverWait , чтобы родительский фрейм был доступен и переключился на него.
  • Индуцируйте WebDriverWait , чтобы дочерний фрейм был доступен и переключился на него.
  • Вы можете использовать следующее решение:

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='gwt-Frame-NavigationComponentViewImplResourcesapplicationFrame' and @id='documentflowdesk']")));
    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='GenCss_style-Model' and contains(@src,'connectionPointId')]")));
    

Здесь вы можете найти соответствующую дискуссию по Способы работы с #document в iframe

0 голосов
/ 06 ноября 2018

Пожалуйста, попробуйте ниже код:

driver.switchTo().frame(driver.findelement(By.xpath(//iframe[@name='documentflowdesk']);

Thread.sleep(5000);

driver.switchTo().frame(driver.findelement(By.xpath(//ifame[@class='GenCss_style-Model']);
...