【问题标题】:Selenium can't find iframe after postback inside the iframeSelenium 在 iframe 内回发后找不到 iframe
【发布时间】:2017-11-22 17:28:23
【问题描述】:

我正在尝试创建一个测试,我必须在 iframe 中填写一些信息。访问 iframe 工作正常,我可以在框架内填写信息。问题是当我填写一个文本框“A”时,它附加了一个回发,它会重新加载 iframe 中的内容,根据文本框 A 中的信息填写另一个文本框“B”。

以下是我的观察: 当我第一次找到 iframe 时,它​​看起来像这样:

<iframe frameborder="0" src="<removed for clearity>">...</iframe>

回发发生后,它看起来像这样:

<iframe frameborder="0" src="<removed for clearity>" cd_frame_id_="668325d5a0a2a8cb76a92b9eb819d327">...</iframe>

所以有些东西改变了。

在我的 C# 代码中,首先像这样找到我的框架(是的,遗憾的是,这是最好的方法):

var iframe = driver.FindElement(By.XPath("//div[@rawtitle=\"TIME\"]//table//tbody//tr//td//div//div//iframe"));
driver.SwitchTo().Frame(iframe);

我可以轻松地在文本框 A 中输入文本:

var completed = driver.FindElement(By.Id("MainContent_txtCompletedHours")); 
completed.SendKeys("0,25");

然后我等待文本框 B 被填充,但此时我找不到它,也找不到 iframe。我试图再次重新定位框架以再次切换到它,但我找不到该元素。它没有移动位置。它刚刚获得了 cd_frame_id 属性。这是我尝试重新定位 iframe 的代码:

while (true)
{
    try
    {
        iframe = driver.FindElement(By.XPath("//div[@rawtitle=\"TIME\"]//table//tbody//tr//td//div//div//iframe"));
        driver.SwitchTo().Frame(iframe);
        invoiced = driver.FindElement(By.Id("MainContent_txtInvoiceHours")); 
        if (invoiced.Text == "0,25") // and wait for it
            break;
    }
    catch (NoSuchElementException e)
    {
        Debug.WriteLine("Could not find element, retrying...");
    }
    finally
    {
        Thread.Sleep(500);
    }
}

当我尝试获取 iframe 元素时代码失败。

在框架内回发后,如何再次获取 iframe?

【问题讨论】:

    标签: c# selenium selenium-chromedriver


    【解决方案1】:

    正如您在填写文本框“A”时提到的,它附有回发,因此我们将借助唯一的xpath 来识别&lt;iframe&gt;,如下所示:

    //Ensure that you are back to the base frame
    driver.SwitchTo().DefaultContent();
    //SwitchTo the intended frame
    driver.SwitchTo().Frame(driver.FindElement(By.XPath("//iframe[contains(@src,'<removed for clearity>')]")));
    

    【讨论】:

    • 我不敢相信我没有看到。当然,我必须在原始内容中才能找到框架。框架现在完全可拆卸。我确实有一个问题,即文本框 B 内容正确显示,但元素的文本属性为空。但这是我要研究的另一个问题。谢谢
    猜你喜欢
    • 2020-12-29
    • 2019-07-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2021-06-12
    • 2014-06-11
    相关资源
    最近更新 更多