我无法找到iframe。我想切换到这个iframe,然后点击其中的元素。
我尝试使用Id,Xpath,TagName和CssSelector查找iframe,但我的测试在每次查找元素时超时。
这是页面来源中显示的iframe:
<div xmlns="http://www.w3.org/1999/xhtml" id="dashboardView" style="display: block;">
<iframe id="dashboardViewFrame" border="0" scrolling="no" frameborder="0"
style="visibility: visible; height: 607px; width: 1280px; background-color: transparent;"
src="HtmlViewer.ashx?Dd_ContentId=6a8a44ae-2bd5-4f3c-8583-e777279ad4f2"></iframe>
</div>
<iframe xmlns="http://www.w3.org/1999/xhtml" id="dashboardViewFrame" border="0" scrolling="no"
frameborder="0" style="visibility: visible; height: 607px; width: 1280px; background-color:
transparent;" src="HtmlViewer.ashx?Dd_ContentId=6a8a44ae-2bd5-4f3c-8583-e777279ad4f2"></iframe>
这是我目前的代码:
public static bool IsAt
{
get
{
try
{
var dashboardiFrame = Driver.Instance.FindElement(By.Id("dashboardViewFrame"));
//todo switch to iframe
//todo find element within iframe
return true;
}
catch
{
return false;
}
}
}
有人可以建议一种方法来找到iframe并切换到它吗?
答案 0 :(得分:2)
主要问题是我的测试打开了一个新窗口,但我的测试是在旧窗口上查找元素。我通过使用以下方法切换到新页面来解决这个问题:
Driver.Instance.SwitchTo().Window(Driver.Instance.WindowHandles.Last());
然后我也可以通过使用SwitchTo()切换到iframe,如下所示:
public static bool IsAt
{
get
{
try
{
Driver.Instance.SwitchTo().Window(Driver.Instance.WindowHandles.Last());
var DBViFrame = Driver.Instance.FindElement(By.Id("dashboardViewFrame"));
Driver.Instance.SwitchTo().Frame(DBViFrame);
var dataEntryButton = Driver.Instance.FindElement(By.Id("HyperlinkDataEntry"));
dataEntryButton.Click();
return true;
}
catch(Exception ex)
{
return false;
}
}
}
答案 1 :(得分:2)
有些时候你必须在5秒左右睡觉,直到页面加载完全然后找到框架。
试试这个
Thread.sleep代码(50000); IwebElement Frame = Driver.SwitchTo()。Frame(&#34;帧的id&#34;);
//然后帧内的任何元素都应该通过这一行
Frame.FindElement(By.id(&#34;框架内的元素ID&#34;);