【问题标题】:Moving through mutiple iFrames using XPath & C#使用 XPath 和 C# 在多个 iFrame 中移动
【发布时间】:2015-08-18 02:21:19
【问题描述】:

我需要从嵌套在两个 iframe 中的表中获取数据元素。框架显示为:

<iframe id="appContent" frameborder="0" name="appContentFrame" src="/controller.aspx" style="height: 0px; width: 1319px;">
       //....
            <iframe id="childFrame" frameborder="0" src="javascript:"";" onload="AjaxDocument.registerFrames('childFrame');" name="childFrame">

我正在尝试使用以下方法选择两个框架:

 driver.SwitchTo().Frame("appContent");
 driver.SwitchTo().Frame("childFrame");

我第一次使用它们时调用有效,但是当我第二次调用它们时,在我加载新网页后,它们无法找到。我之前在程序中使用了这些相同的调用,我在另一个具有相同命名 iframe 的网页上输入数据。我不能再次调用它们的原因可能是因为两组调用都在同一代码范围内吗?

【问题讨论】:

    标签: c# html iframe xpath selenium-webdriver


    【解决方案1】:

    可能的原因是您没有切换回父级。当您完成内部工作后,首先在iframe 执行driver.SwitchTo().DefaultContent(),这将带您回到上一帧并再次对iframe 的上层执行相同操作。

    编辑

    在 C# 上找到正确的 API 文档很痛苦。但是,这些是用于切换帧的两种重要方法的最简洁定义。

    driver.SwitchTo().ParentFrame();
    

    选择当前选中框架的父框架。

    driver.SwitchTo().DefaultContent();
    

    切换到当前具有焦点的元素,或者body元素

    参考this

    【讨论】:

    • 感谢您的回复。我应该为我输入的每个 iframe 拨打DefaultContent() 吗?还是一个电话足以让我回到页面的默认状态? - 无论如何,我通过了我被阻止的地方,所以谢谢你的回答! +1
    • 谢谢!这很有帮助! :)
    • 正确的 API 文档以 .chm 文件的形式提供,每个 .NET 绑定实例都通过 Selenium project download location 下载。它是在项目发布时新生成的。文档的在线托管版本不会经常更新,因为为 .NET 生成 API 文档需要接触文档站点中的每个文件,而这些文件包含数千个文件。
    • @JimEvans 哇!我不知道。感谢您提供此信息
    • @JimEvans 谢谢你的信息。我不知道!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多