2015-11-10 3 views
3

Так что я пишу тестовый скрипт для некоторых форм, который использует CAPTCHA, чтобы попытаться остановить боты. очевидно, что никакие часы траты времени не годы, пытаясь разработать способ победить CAPTCHA с помощью PHPUnit + Selenium, но я все же хочу, чтобы тест продолжался после того, как страница была отправлена.Есть ли способ, которым я могу приостановить/возобновить тест PHPUnit + Selenium, пока я решаю CAPTCHA?

Я полагал, что, поскольку у меня есть несколько экранов, лучший способ я мог бы сделать это, чтобы запустить тест на одном экране и использовать что-то вроде executeScript('alert("CAPTCHA time!")'); или какой-JQuery, дайте мне знать, когда решать капчу себя в то время как тест работает

однако я не могу видеть, как я могу это сделать, одна идея, я думал, что должен был иметь тест-стоп, но код я тока использовать

$host = 'http://localhost:4444/wd/hub'; // this is the default 
$capabilities = array(WebDriverCapabilityType::BROWSER_NAME => 'firefox'); 
$this->driver = RemoteWebDriver::create($host, $capabilities, 5000); 

// adding cookie 
$this->driver->manage()->deleteAllCookies(); 
$this->driver->manage()->addCookie(array(
    'name' => 'cookie_name', 
    'value' => 'cookie_value', 
)); 
$this->cookies = $this->driver->manage()->getCookies(); 

просто начать новый браузер Firefox, а не продолжать тот, который уже был открыт.

Другая идея, которую я имел, заключалась в том, чтобы проверить «паузу» до тех пор, пока я не разрешу CAPTCHA, а затем перезагрузится, когда закончите, но я тоже не знаю, как это сделать. и у меня действительно нет хорошего справочника по синтаксису для Webdriver, который я использую, помимо чтения, хотя весь код пытается найти одну функцию.

Так что я могу приостановить/возобновить тест PHPUnit + Selenium Я решаю CAPTCHA?

ПРИМЕЧАНИЕ: WebDriver я использую это the Facebook one и я включить этот __init__.php файл

<?php 
// Copyright 2004-present Facebook. All Rights Reserved. 
// 
// Licensed under the Apache License, Version 2.0 (the "License"); 
// you may not use this file except in compliance with the License. 
// You may obtain a copy of the License at 
// 
//  http://www.apache.org/licenses/LICENSE-2.0 
// 
// Unless required by applicable law or agreed to in writing, software 
// distributed under the License is distributed on an "AS IS" BASIS, 
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
// See the License for the specific language governing permissions and 
// limitations under the License. 

// interface 
require_once('WebDriverSearchContext.php'); 
require_once('WebDriver.php'); 
require_once('WebDriverElement.php'); 
require_once('WebDriverCommandExecutor.php'); 
require_once('WebDriverAction.php'); 
require_once('WebDriverEventListener.php'); 

// abstract class 
require_once('interactions/internal/WebDriverKeysRelatedAction.php'); 
require_once('interactions/internal/WebDriverSingleKeyAction.php'); 

// class 
require_once('WebDriverAlert.php'); 
require_once('WebDriverBy.php'); 
require_once('WebDriverDimension.php'); 
require_once('WebDriverExceptions.php'); 
require_once('WebDriverExpectedCondition.php'); 
require_once('WebDriverHasInputDevices.php'); 
require_once('WebDriverKeys.php'); 
require_once('WebDriverNavigation.php'); 
require_once('WebDriverMouse.php'); 
require_once('WebDriverKeyboard.php'); 
require_once('WebDriverOptions.php'); 
require_once('WebDriverPoint.php'); 
require_once('WebDriverSelect.php'); 
require_once('WebDriverTargetLocator.php'); 
require_once('WebDriverTimeouts.php'); 
require_once('WebDriverWait.php'); 
require_once('WebDriverWindow.php'); 
require_once('interactions/WebDriverActions.php'); 
require_once('interactions/internal/WebDriverMouseAction.php'); 
require_once('interactions/WebDriverCompositeAction.php'); 
require_once('interactions/internal/WebDriverButtonReleaseAction.php'); 
require_once('interactions/internal/WebDriverClickAction.php'); 
require_once('interactions/internal/WebDriverClickAndHoldAction.php'); 
require_once('interactions/internal/WebDriverContextClickAction.php'); 
require_once('interactions/internal/WebDriverCoordinates.php'); 
require_once('interactions/internal/WebDriverDoubleClickAction.php'); 
require_once('interactions/internal/WebDriverMouseMoveAction.php'); 
require_once('interactions/internal/WebDriverMoveToOffsetAction.php'); 
require_once('internal/WebDriverLocatable.php'); 
require_once('remote/RemoteMouse.php'); 
require_once('remote/RemoteKeyboard.php'); 
require_once('remote/RemoteWebDriver.php'); 
require_once('remote/RemoteWebElement.php'); 
require_once('remote/WebDriverBrowserType.php'); 
require_once('remote/WebDriverCapabilityType.php'); 
require_once('remote/HttpCommandExecutor.php'); 
require_once('interactions/internal/WebDriverSendKeysAction.php'); 
require_once('interactions/internal/WebDriverKeyDownAction.php'); 
require_once('interactions/internal/WebDriverKeyUpAction.php'); 

require_once('support/events/EventFiringWebDriver.php'); 
require_once('support/events/EventFiringWebDriverNavigation.php'); 
require_once('WebDriverDispatcher.php'); 
require_once('support/events/EventFiringWebElement.php'); 

// touch 
require_once('interactions/WebDriverTouchScreen.php'); 
require_once('remote/RemoteTouchScreen.php'); 
require_once('interactions/WebDriverTouchActions.php'); 
require_once('interactions/touch/WebDriverTouchAction.php'); 
require_once('interactions/touch/WebDriverDoubleTapAction.php'); 
require_once('interactions/touch/WebDriverDownAction.php'); 
require_once('interactions/touch/WebDriverFlickAction.php'); 
require_once('interactions/touch/WebDriverFlickFromElementAction.php'); 
require_once('interactions/touch/WebDriverLongPressAction.php'); 
require_once('interactions/touch/WebDriverMoveAction.php'); 
require_once('interactions/touch/WebDriverScrollAction.php'); 
require_once('interactions/touch/WebDriverScrollFromElementAction.php'); 
require_once('interactions/touch/WebDriverTapAction.php'); 
require_once('interactions/touch/WebDriverUpAction.php'); 

, хотя я подозреваю, что файлы я использую УСТАРЕВШИЙ по сравнению с тем, что на GitHub (действительно необходимо обновить в какой-то момент)

Примечание 2: я предложил отключить CAPTCHA, для отладки, но силы, которые будут иметь не сказал, и этот код существовал заранее, так что они должны иметь свои причины, почему мы не можем просто выключить его

+0

Я хотел бы попробовать, чтобы избежать искаженного от запуск приложения/фреймворка в режиме «dev» (где auth или captcha не требуется) или «белые списки» локальных IP-адресов, или настроить использование [ключей тестового API] (https://developers.google.com/recaptcha/docs/faq ? hl = en) в тестовой среде – NoChecksum

+0

@NoChecksum, если этот режим «dev» не является встроенным в CAPTCHA, то это более или менее то, что я уже объяснил в NOTE2, но я спрошу о других вариантах, предложенных вами.в случае случайности, что я застрял с CAPTCHA, я все равно буду искать ответ, но также и для любой другой редкой ситуации, где есть мера против бота, которую я не могу отключить или просто обходить. –

+0

Это всегда хорошая идея оставить решение нахождение полномочий, которые препятствуют вам делать очевидное: либо отключите капчу во время тестовых прогонов, либо предопределите его и введите известный текст (т. е. в режиме dev он всегда является «режимом разработки» в качестве текста, и тест может ввести это как ответ). – Sven

ответ

0

Если вы работаете в PHPUnit и Selenium, хотя в командной строке вы можете использовать STDIN пример найти на PHP.net-х Input/output streams page

$line = trim(fgets(STDIN)); 

когда код достигает, что лайм все сделает паузу и подождать, пока вы не нажмете Enter, так если вы используете код, как этот

echo "\nCommand: "; 
$line = trim(fgets(STDIN)); 
echo "\nInput = '".$line ."'"; 

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

Единственная проблема заключается в том, что если вы позволите Селен простоя слишком долго сессии до времени, и, таким образом, привести к ошибкам, когда код продолжается (и в настоящее время ищет, чтобы попытаться обойти это)