2010-06-01 14 views
1

J'ai un bouton (en dehors d'un formulaire) qui redirige vers une autre page en utilisant l'attribut onclick qui appelle window.location pour rediriger l'utilisateur vers une autre page. Cette fois je ne peux pas changer le HTML. J'utilise Safari 4 pour tester. Comment puis-je cliquer sur un bouton qui utilise l'attribut onclick et window.location pour rediriger en utilisant Safari 4 et Selenium RC PHPUnit Extension?Selenium RC: Comment cliquer sur les boutons qui utilisent onclick window.location?

Voici mon HTML:

<input type="button" onclick="window.location='/registrations/new'" value="Start a new registration" id="create"> 

Mise à jour: Sinon, je pense à faire quelque chose où j'affirme qu'un emplacement est spécifié dans le window.location='', stocker cet endroit, et appeler la commande open() à l'aide cet endroit. Je ne sais pas si c'est une approche acceptable pour tester cela.

+0

Qu'est-ce qui se passe lorsque vous cliquez dessus, la manière standard? – Nicole

+0

Cela fonctionne très bien lorsque vous cliquez dessus manuellement. Mais il ne redirige pas lorsque vous essayez de cliquer dessus avec Selenium RC. – Andrew

+0

Que se passe-t-il lorsque vous exécutez le test dans un autre navigateur? Je l'ai testé avec succès dans Firefox, est-ce juste un problème avec Safari? –

Répondre

0

Cette doit fonctionner, mais vous pouvez également essayer de déclencher l'événement click à l'aide de la commande fireEvent.

selenium.fireEvent("id=create", "click"); 
+0

J'ai essayé ceci dans Safari 4 et cela ne fonctionne pas. – Andrew

+0

Je suis d'accord. Je ai essayé cela dans Firefox 3.6 et ça ne fonctionne pas. –

2

Nous avons décidé d'étendre la fonctionnalité par défaut clickAndWait() appeler openAndWait() si le bouton a une 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("[email protected]"); 
     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); 
}