Так что я пишу тестовый скрипт для некоторых форм, который использует 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, для отладки, но силы, которые будут иметь не сказал, и этот код существовал заранее, так что они должны иметь свои причины, почему мы не можем просто выключить его
Я хотел бы попробовать, чтобы избежать искаженного от запуск приложения/фреймворка в режиме «dev» (где auth или captcha не требуется) или «белые списки» локальных IP-адресов, или настроить использование [ключей тестового API] (https://developers.google.com/recaptcha/docs/faq ? hl = en) в тестовой среде – NoChecksum
@NoChecksum, если этот режим «dev» не является встроенным в CAPTCHA, то это более или менее то, что я уже объяснил в NOTE2, но я спрошу о других вариантах, предложенных вами.в случае случайности, что я застрял с CAPTCHA, я все равно буду искать ответ, но также и для любой другой редкой ситуации, где есть мера против бота, которую я не могу отключить или просто обходить. –
Это всегда хорошая идея оставить решение нахождение полномочий, которые препятствуют вам делать очевидное: либо отключите капчу во время тестовых прогонов, либо предопределите его и введите известный текст (т. е. в режиме dev он всегда является «режимом разработки» в качестве текста, и тест может ввести это как ответ). – Sven