0
votes

Here is picture --- Beginning Page --- Page After Click on a button --I'm a beginner then I have a problem when I using

GetDriver().switchTo().frame(element) or ExpectedConditions.frameToBeAvailableAndSwitchToIt(element)

Here is the HTML:

<head id="ctl00_Head1">
<body>
<div id="divPleaseWait" style="display: none"/>
<div>
<a>
<div style="position: absolute; visibility: hidden;">
<div id="TB_overlay" class="TB_overlayBG"/>
<div id="TB_window" style="margin-left: -440px; width: 880px; margin-top: -295px; display: block;">
<div id="TB_title">
<iframe id="TB_iframeContent" frameborder="0" style="width:879px;height:562px;" onload="tb_showIframe()" name="TB_iframeContent303" src="CompanyDetail.aspx?" hspace="0"/>
</div>

And my code is

WebDriverWait wait = new WebDriverWait(GetDriver(), time_out);
        wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.Id("TB_iframeContent")));

or

GetDriver().switchTo().frame(By.Id("TB_iframeContent"));

but I unable switch to that iframe and located the id in that iframe This is my error out

Timed out after 30 seconds waiting for frame to be available: [[FirefoxDriver: firefox on WINDOWS (fd412e93-d76e-4934-9fa5-a771c836ffe3)] -> id: TB_iframeContent] Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03' System info: host: 'ABCV-VN-01-PC', ip: '192.168.3.30', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_51' Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=47.0.1, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] Session ID: fd412e93-d76e-4934-9fa5-a771c836ffe3 Unable to locate element: {"method":"id","selector":"ctl00_adminMenuCompany"}

Could you please help me?!? I really mad for it!!!!

Thank you all for supporting. I find that my firefox driver is error with this issue. When I try with chrome driver, It's OK. I think I should update to selenium 3.0

1
You have this div which is hidden which seems to contain the iframe you are looking for - <div style="position: absolute; visibility: hidden;">... Is the iframe visible on the browser when your webdriver code is trying to find it. Is their some other action which is making the div visible? - Grasshopper
Are you sure iframe id is not dynamically changing?? - Saurabh Gaur
Your locator is missing quotes... it should be By.Id("TB_iframeContent"). - JeffC
@Grasshopper Hi, the iframe is visible after click on a button. But, webdriver seem to be NOT find it. I find that webdriver still stay in page at beginning contains html <body> <div id="divPleaseWait" style="display: none"/> <div> <a> <div style="position: absolute; visibility: hidden;"> Then I click button it show the html I send on top. Could you share your point?!? You can take a look at picture I update. - YuGO
@SaurabhGaur thanks, but It absolutely NOT changing ID - YuGO

1 Answers

0
votes

My guess is that maybe the IFRAME you are looking for is nested inside another IFRAME? Run this code and see if the IFRAME you are looking for is present in the list.

driver.findElement(locator).click(); // click the button to make the IFRAME visible
// you may need a wait here
List<WebElement> iframes = driver.findElements(By.tagName("iframe"));
for (WebElement iframe : iframes)
{
    System.out.println(iframe.getAttribute("outerHTML"));
}

EDIT:

Have you tried using a frame index? Try the below.

driver.findElement(locator).click(); // click the button to make the IFRAME visible
new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(0));

I would suggest that if the above doesn't work, I would put a breakpoint on the line after you click the button that exposes the IFRAME and inspect the page. Something weird is going on. I don't suppose you can post a link to the page?