2010-06-01 3 views
1

У меня есть кнопка (вне формы), которая перенаправляется на другую страницу, используя атрибут onclick, который вызывает window.location, чтобы перенаправить пользователя на другую страницу. На этот раз я не могу изменить HTML. Я использую Safari 4 для тестирования. Как я могу нажать кнопку, которая использует атрибут onclick, и window.location для перенаправления с использованием Safari 4 и Selenium RC PHPUnit Extension?Selenium RC: Как нажимать кнопки, которые используют onclick window.location?

Вот мой HTML:

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

Update: Кроме того, я думал о делать что-то, где я утверждаю, что местоположение указано в window.location='', хранить это место, и вызовите команду open() с помощью это место. Не уверен, что это приемлемый подход для тестирования этого.

+0

Что происходит, когда вы щелкните по ней, стандартный путь? – Nicole

+0

Он отлично работает, когда вы нажимаете его вручную. Но он не перенаправляется при попытке щелкнуть его с помощью Selenium RC. – Andrew

+0

Что происходит, когда вы запускаете тест в другом браузере? Я успешно тестировал это в Firefox, это просто проблема с Safari? –

ответ

0

Этот должен работать, однако вы также можете попробовать запустить событие щелчка с помощью команды fireEvent.

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

Я пробовал это в Safari 4, и он не работает. – Andrew

+0

Я согласен. Пробовал это в firefox 3.6, и он не работает. –

2

Мы решили расширить функциональные возможности по умолчанию clickAndWait() для вызова openAndWait() если кнопка имеет 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); 
} 
Смежные вопросы