Selenium RC: Как нажимать кнопки, которые используют onclick window.location? - PullRequest
1 голос
/ 02 июня 2010

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

Вот мой HTML:

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

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

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

Мы решили расширить функциональность 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("$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);
}
0 голосов
/ 02 июня 2010

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

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