views:

932

answers:

1

Hello. I have an app in which the user clicks a button, triggering an iFrame to open. I'm having real trouble waiting for this frame to open an load before continuing.

I can't use:

wait_for_page_to_load

because the it's not the page that loads, it's the iframe.

I can't use:

select_frame

because the frame hasn't loaded yet

so I'm left with the ever so ugly

sleep(3)

before I can select the frame and assert something about it.

Any suggestions on how to do this properly? I don't want to use lib specific JS as I am extracting a Selenium DSL for use across multiple projects. Also, I'm using selenium-client so anything ruby based would be a plus.

Cheers,

Ad.

edit: I can't seem to use:

wait_for_frame_to_load

either, it times out.

+2  A: 

Not sure if this will work because Iframes run in a separate sandbox to normal frames because you can do cross site page calls and they may have their own JavaScript which you wont be able to interact with.

@selenium.wait_for_frame_to_load "iframe", "30000"

it may work if you run your tests in *chrome or *iehta but don't have anything at the moment to test with

AutomatedTester
sorry fella, forgot that one - tried that too. I can use that once the frame has loaded and I have selected it, but it just times out if i wait for it after clicking the button that triggers it. Thanks tho.
Rodreegez
I thought that might be the case. IFrames tend to be sandboxed because they are seen as security risks by Browsers
AutomatedTester
arrrgh! worked it out - I was using the ID of the frame (i.e. #iframe) rather than just the name of the frame (iframe). I now have this working in *chrome. I select the frame, then wait for it to load, then assert something about it. I then select_frame("relative=parent") to get out of the frame. Cheers!
Rodreegez