【问题标题】:Not able to switch to an iFrame which is within a <section> tag无法切换到 <section> 标记内的 iFrame
【发布时间】:2019-07-09 19:20:47
【问题描述】:

我在尝试切换到包含在 &lt;section&gt; 标记中的 iFrame 时遇到 NoSuchFrame 异常。有人可以帮我吗?

我正在尝试切换到 iFrame 进行硒测试。我已经使用driver.switchTo()方法切换到iFrame。

&lt;section&gt;HTML:

<section id="modal-root">
 <div class="modal-wrapper">
   <div id="#####" class="modal-container modal-enter-done">
     <div class="modal ####" role="dialog">
    <button type="button" aria-label="Close Modal" class="button-icon 
        modal-close">
    <span class="icon icon-x">
    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" 
         role="presentation">
      <path d="M8.41421 7L13.7071 12.2929C14.0976 12.6834 14.0976 13.3166 
           13.7071 13.7071C13.3166 14.0976 12.6834 14.0976 12.2929 13.7071L7 
           8.41421L1.70711 13.7071C1.31658 14.0976 0.683418 14.0976 0.292893
       13.7071C-0.0976311 13.3166 -0.0976311 12.6834 0.292893 
           12.2929L5.58579 7L0.292893 1.70711C-0.0976311 1.31658 
      -0.0976311 0.683418 0.292893 0.292893C0.683418 -0.0976311 1.31658 
          -0.0976311 1.70711 0.292893L7 5.58579L12.2929 0.292893C12.6834 
          -0.0976311 13.3166 -0.0976311 13.7071 0.292893C14.0976 0.683418 
           14.0976 1.31658 13.7071 1.70711L8.41421 7Z" transform="translate(5 
           5)" fill="black">
      </path>
    </svg>
      </span>
    </button>
    <div class="modal-body">
      <div class="#####">
    <iframe title="######" id="#####" name="#####"src="######">
    </iframe>
     </div>
   </div>
 </div>
</div>
<div class="modal-overlay">
</div>
</div>
</section>

我正在尝试在我的测试中切换到 iFrame。我正在运行以下 sn-p:

WebDriver driver = new ChromeDriver();
driver.get(url);
driver.manage().window().maximize();
driver.switchTo().frame(iFrame_id);

我遇到了以下异常:

org.openqa.selenium.NoSuchFrameException:找不到框架元素 名称或 ID iFrame_id

我不确定是否可以直接切换到 iFrame,因为它包含在 &lt;section&gt; 标记中。

感谢任何帮助!

【问题讨论】:

  • 在页面源中搜索“frame”,看看是否有多个frame或者iframe。您想要的可能是嵌套的。
  • 如果只是一个iframe那么就用索引来切换。框架 ID 可以是动态的。 driver.switchTo().frame(0);
  • @Sureshmani 虽然在这种情况下使用索引 0 现在可以工作,但最好查看它是否具有 ID 或名称并使用它。将来,可能会添加更多帧,并且在名称/ID 不太可能更改的情况下,索引可能会意外失败。
  • 尝试使用等待...您可能会看到此错误,因为它仍在加载:“new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.locator));”
  • @iamdanchiv 感谢您让帖子看起来很专业!

标签: selenium iframe


【解决方案1】:

我设法通过@JeffC 的建议使用idname 来完成这项工作。我使用了 ID,我在代码中所做的唯一更改如下:

代替:

driver.switchTo().frame(iFrame_id) 

...我用过:

 driver.switchTo().frame(findElement(By.id(iFrame_id)))

感谢所有帮助过的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2021-06-19
    • 2018-12-31
    • 2017-12-24
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多