2016-01-16 3 views
0

Я работаю над программой, которая автоматически регистрируется на сайте с использованием Selenium. В некоторых ситуациях, если сайт не помнит браузер, он попросит вас ответить на секретный вопрос, прежде чем он переберет вас на страницу пароля. Первоначально я думал, что просто обработаю это с помощью инструкции If, которая проверяет текущий URL-адрес на определенный URL-адрес, который, как я знал, был подготовлен, когда я был направлен на секретную страницу вопросов. Проблема, с которой я сталкиваюсь, заключается в том, что URL-адрес для секретной страницы вопросов и URL-адрес страницы пароля одинаковы. Есть ли способ дифференцировать эти две страницы по URL в этой ситуации, или мне нужно найти альтернативный метод?Обработка двух разных страниц с тем же адресом

+0

Если URL-адреса ** точно совпадают, то как вы могли бы дифференцироваться? – Ohgodwhy

+0

lol Вот что я пытаюсь выяснить. Я никогда раньше не видел эту ситуацию (тогда снова я тоже не обращал внимания). Думаю, мне, наверное, не повезло, но подумал, что я попробую здесь, прежде чем я сдадусь. – Jcmoney1010

+1

просто выполните оператор php if и получите переменную от url? переменная от url говорит, что X будет генерировать представление для X только на той же странице, если его Y, а затем показывает Y. все вызваны из index.php, например. – Kray

ответ

0

Если URL-адреса являются точно такими же, у вас не будет различий в сравнении, поэтому вы не сможете определить, что содержимое страницы основано на URL-адресе.

Обычно существует одна страница с одним URL-адресом, которая показывает различный контент, определяемый кодом бэкэнд, который Selenium не может видеть. Вам нужно будет сравнить что-то другое между двумя страницами, таким элементом, который появляется только на одной странице.

Предполагая, что вам все равно, отображается ли пароль или секретный вопрос, вы просто хотите, чтобы Selenium прошел процедуру входа в систему, простым решением является использование инструкции if/else для проверки формы, чтобы заполнить форму, которая присутствует.

if ($this->isElementPresent($password_form)) { 
    // enter the password; 
} elseif ($this->isElementPresent($secret_question)) { 
    // answer the secret question; 
} else { 
    throw new Exception('Could not find password form or secret question on the login page. [url]'); 
} 

Фактическая формы элемент, скорее всего, имеет другой идентификатор или имя для каждой формы, которую можно использовать для идентификации, или входа для пароля/секретного ответа будет иметь разные имена. (Если все остальное не удается, вы можете найти текст на странице, в котором говорится, следует ли вводить пароль или секретный вопрос.)

0

Waaiit a miiinuute. Вы все ошиблись.

При написании тестов у вас должен быть четко определенный (ожидаемый) вывод/поведение для одного и того же входа.

Таким образом, в вашем случае, вы должны иметь 2 испытания:

  • сделать все вещи, необходимые, чтобы сделать ваше приложение забывает браузер (четкие куки, изменения браузера подпись, и т.д.) и убедитесь, что ваш получение «секретный вопрос» страница
  • сделать все вещи, необходимые, чтобы убедиться, ваш запрос представляет известный браузер и проверить вы на странице входа

Что-то вроде

testLogin_unknownBrowser_showsSecretQuestion: 
    ->clearCookies 
    ->findElement(byId 'secretQuestion') 

testLogin_knownBrowser_showsLogin: 
    ->setCookies 
    ->findElement(byId 'username') 
    ->findElement(byId 'password') 

На этом этапе легко определить проблему, если один из ваших тестов не прошел.

В идеале вы не включаете в себя какую-либо магию и стараетесь максимально четко прояснить свои тесты.

Возможно, вы захотите отвлечь «сделать все, чтобы войти» в BaseTestCase, и использовать его в нескольких случаях, когда вы просто хотите войти в систему и протестировать что-то еще, не постоянно решая проблему «какой экран у меня есть».

Смежные вопросы