- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试创建一个测试,我必须在 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?
最佳答案
正如您提到的,当您填写文本框“A”时,它会附加一个回传,因此我们将借助一个独特的 xpath
hich 标识 <iframe>
如下:
//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>')]")));
关于c# - 在 iframe 内回发后,Selenium 找不到 iframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429683/
我正在尝试在 Windows 上运行的小于 1GB 的 VM 上设置 YouTrack 和 TeamCity。使用率将非常低(用户和请求)。这是一个 POC 环境,如果它有效,我可能会将它推送到一个超
所以我在尝试使用 FORFILES 解决这个问题时遇到了麻烦。我正在尝试获取不超过 4 天的文件。所以基本上少于 4 天。然而,这似乎不太可能,因为/d -4 获取所有 4 天或更早的项目。 以下是我
如何从下面的 events 表中选择小于 15 分钟前创建的 events? CREATE TABLE events ( created_at timestamp NOT NULL DEFAU
Google Analytics Realtime提供 rt:minutesAgo ,可以过滤查询。 然而,它是一个维度而不是一个度量标准,<=不能在过滤器中使用。 假设我想在最后 n 分钟内获得一些
iOS 核心数据 - 严重的应用程序错误 - 尝试插入 nil 你好, 我的应用程序实际上运行稳定,但在极少数情况下它会崩溃并显示此错误消息... 2019-04-02 20:48:52.437172
我想制作一个 html div 以快速向右移动(例如不到 1 秒)并消失。然后1秒后再次直接出现在这个过程最开始div的位置。此过程将由单击按钮并重复 10 次触发。 我试图在 CSS 中使用过渡属性
我发现使用 TimeTrigger 是 Windows 10 (UWP) 上计划后台任务的方式。但是看起来我们需要给出的最小数字是 15 分钟。只是想知道,即使我们安排它在接下来的 1 分钟内运行,警
我必须在 1 秒内在屏幕上打印 2^20 行整数 printf 不够快,还有其他易于使用的快速输出替代方法吗? 每一行只包含 1 个整数。 我要求它用于竞争性编程问题,我必须将其源代码提交给法官。 最
我是一名优秀的程序员,十分优秀!