I have a button (outside of a form) that redirects to another page using the onclick
attribute that calls window.location
to redirect the user to another page. This time I can't change the HTML. I am using Safari 4 for testing. How can I click a button that uses the onclick
attribute and window.location
to redirect using Safari 4 and Selenium RC PHPUnit Extension?
Here's my HTML:
<input type="button" onclick="window.location='/registrations/new'" value="Start a new registration" id="create">
Update: Alternatively, I'm thinking about doing something where I assert that a location is specified in the window.location=''
, store that location, and call the open()
command using that location. Not sure if this is an acceptable approach to testing this.
We decided to extend the default clickAndWait()
functionality to call openAndWait()
if the button has an onclick="window.location='/something';"
/**
* Extends original clickAndWait() functionality to provide the ability to click buttons that use window.location to redirect users
* @param $locator
*/
public function clickAndWait($locator)
{
$this->assertElementPresent($locator);
$hasOnclickAttribute = $this->getEval('this.browserbot.findElement("' . $locator . '").hasAttribute("onclick")');
if ($hasOnclickAttribute === 'true') {
$onclickValue = $this->getAttribute("$locator@onclick");
if (strpos($onclickValue, "window.location=") !== false) {
// Clean up the location
$temp = explode("=" , $onclickValue);
$location = trim($temp[1], "';");
$location = trim($location, '"');
return $this->openAndWait($location);
}
}
return parent::clickAndWait($locator);
}
This should work, however you could also try firing the click event using the fireEvent
command.
selenium.fireEvent("id=create", "click");