Use Cases

Решение CAPTCHA для обеспечения качества и авторизованного тестирования

Командам тестирования необходимо регулярно проверять потоки, защищенные CAPTCHA. CaptchaAI позволяет автоматизировать эти тесты без ручного взаимодействия с CAPTCHA.


Когда командам контроля качества необходимо решение CAPTCHA

Сценарий Почему CaptchaAI помогает
Регрессионное тестирование Убедитесь, что формы по-прежнему работают после развертывания.
Сквозное тестирование Тестируйте полный путь пользователя
Нагрузочное тестирование Моделируйте реалистичные потоки CAPTCHA в большом масштабе
Кроссбраузерное тестирование Проверка отображения CAPTCHA в браузерах
Тестирование доступности Тестирование альтернативных потоков для пользователей с ограниченными возможностями

Интеграция с Pytest

import pytest
import requests
import time


class CaptchaTestHelper:
    """Helper for solving CAPTCHAs in test environments."""

    def __init__(self, api_key):
        self.api_key = api_key

    def solve_recaptcha(self, sitekey, pageurl, timeout=120):
        """Solve reCAPTCHA and return token."""
        resp = requests.post("https://ocr.captchaai.com/in.php", data={
            "key": self.api_key,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": 1,
        }, timeout=30)
        result = resp.json()
        assert result.get("status") == 1, f"Submit failed: {result}"
        task_id = result["request"]

        deadline = time.time() + timeout
        time.sleep(10)

        while time.time() < deadline:
            resp = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": self.api_key, "action": "get",
                "id": task_id, "json": 1,
            }, timeout=15)
            data = resp.json()

            if data.get("status") == 1:
                return data["request"]
            if data["request"] != "CAPCHA_NOT_READY":
                raise RuntimeError(f"Solve error: {data['request']}")
            time.sleep(5)

        raise TimeoutError("CAPTCHA solve timeout")


@pytest.fixture(scope="session")
def captcha_helper():
    """Provide CaptchaAI helper for test session."""
    import os
    api_key = os.environ.get("CAPTCHAAI_API_KEY")
    if not api_key:
        pytest.skip("CAPTCHAAI_API_KEY not set")
    return CaptchaTestHelper(api_key)


class TestLoginFlow:
    """Test login flow behind reCAPTCHA."""

    SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
    LOGIN_URL = "https://staging.https://staging.example.com/qa-login"

    def test_login_with_valid_credentials(self, captcha_helper):
        """Verify login succeeds with valid creds and solved CAPTCHA."""
        token = captcha_helper.solve_recaptcha(self.SITEKEY, self.LOGIN_URL)
        assert token and len(token) > 100

        resp = requests.post(self.LOGIN_URL, data={
            "username": "test_user",
            "password": "test_pass",
            "g-recaptcha-response": token,
        })
        assert resp.status_code == 200
        assert "Welcome" in resp.text

    def test_login_with_invalid_credentials(self, captcha_helper):
        """Verify login fails gracefully with bad creds but valid CAPTCHA."""
        token = captcha_helper.solve_recaptcha(self.SITEKEY, self.LOGIN_URL)

        resp = requests.post(self.LOGIN_URL, data={
            "username": "wrong_user",
            "password": "wrong_pass",
            "g-recaptcha-response": token,
        })
        assert resp.status_code in (200, 401)
        assert "Invalid" in resp.text or "error" in resp.text.lower()

    def test_login_without_captcha_fails(self):
        """Verify login rejects submissions without CAPTCHA."""
        resp = requests.post(self.LOGIN_URL, data={
            "username": "test_user",
            "password": "test_pass",
        })
        assert resp.status_code in (400, 403, 422)

Тестовый шаблон Selenium E2E

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


@pytest.fixture
def browser():
    """Create browser for testing."""
    options = webdriver.ChromeOptions()
    options.add_argument("--window-size=1920,1080")
    driver = webdriver.Chrome(options=options)
    yield driver
    driver.quit()


class TestRegistrationFlow:
    """Test registration form with CAPTCHA."""

    REG_URL = "https://staging.example.com/register"

    def test_registration_form_submits(self, browser, captcha_helper):
        """Full registration flow with CAPTCHA solving."""
        browser.get(self.REG_URL)

        # Fill form
        browser.find_element(By.ID, "email").send_keys("test@example.com")
        browser.find_element(By.ID, "password").send_keys("SecurePass123!")
        browser.find_element(By.ID, "confirm_password").send_keys("SecurePass123!")

        # Extract sitekey from page
        captcha_div = browser.find_element(By.CSS_SELECTOR, ".g-recaptcha")
        sitekey = captcha_div.get_attribute("data-sitekey")

        # Solve via API
        token = captcha_helper.solve_recaptcha(sitekey, browser.current_url)

        # Inject token
        browser.execute_script("""
            document.querySelector('[name="g-recaptcha-response"]').value = arguments[0];
        """, token)

        # Trigger callback if needed
        callback = captcha_div.get_attribute("data-callback")
        if callback:
            browser.execute_script(f"window['{callback}'](arguments[0]);", token)

        # Submit
        browser.find_element(By.CSS_SELECTOR, "button[type=submit]").click()

        # Verify success
        WebDriverWait(browser, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".success-message"))
        )

    def test_captcha_renders_on_page(self, browser):
        """Verify CAPTCHA widget loads on registration page."""
        browser.get(self.REG_URL)
        captcha = WebDriverWait(browser, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".g-recaptcha, iframe[src*='recaptcha']"))
        )
        assert captcha.is_displayed()

Тестовая конфигурация

# conftest.py
import os

# Mark tests that need CAPTCHA solving
def pytest_configure(config):
    config.addinivalue_line(
        "markers", "captcha: tests requiring CAPTCHA solving (may be slow)"
    )


# pytest.ini or pyproject.toml
"""
[tool.pytest.ini_options]
markers = [
    "captcha: tests requiring CAPTCHA solving (may be slow)",
]
"""

Запускайте только тесты CAPTCHA:

pytest -m captcha -v

Запуск без тестов CAPTCHA (быстрый конвейер):

pytest -m "not captcha" -v

Советы по экономичному тестированию

Стратегия Выгода
Используйте промежуточную среду Более низкая сложность CAPTCHA
Запускайте тесты CAPTCHA по расписанию, а не при каждом нажатии Сократите затраты на API
Кэшируйте результаты тестов для нестабильных тестов. Избегайте ненужных повторных решений
Используйте флаг среды, чтобы пропустить CAPTCHA локально Экономьте затраты во время разработки
Пакетное тестирование CAPTCHA в специальном задании CI Контроль затрат на трубопровод

Часто задаваемые вопросы

Сколько стоит проведение тестов CAPTCHA?

Каждое решение reCAPTCHA v2 стоит ~ 0,003 доллара США. Набор тестов с 50 тестами CAPTCHA стоит ~ 0,15 доллара за прогон. Ежедневные расходы на эксплуатацию ~$4,50/month.

Стоит ли решать CAPTCHA в модульных тестах?

Нет. Имитация ответов CAPTCHA в модульных тестах. Решайте только настоящие CAPTCHA в интеграционных и E2E-тестах в реальных средах.

Могу ли я использовать CaptchaAI с другими платформами тестирования?

Да. CaptchaAI основан на HTTP, поэтому работает с любой тестовой средой на любом языке — Jest, Mocha, JUnit, NUnit и т. д.


Связанные руководства


Автоматизируйте свой конвейер контроля качества —добавьте CaptchaAI в свои тесты.

Комментарии для этой статьи отключены.

Похожие сообщения

Use Cases Автоматическая отправка форм с обработкой CAPTCHA
Практическое руководство по Автоматической отработке форм CAPTCHA с реалистичными сценариями, советами по рабочему процессу и практическими действиями по исполь...

Практическое руководство по Автоматической отработке форм CAPTCHA с реалистичными сценариями, советами по рабо...

Apr 23, 2026
Tutorials Создайте конвейер автоматизированного тестирования с помощью CaptchaAI
Пошаговое руководство по созданию конвейерного внедрения с помощью Captcha AI, с примерами прямого повторного использования и понятным рабочим процессом Captcha...

Пошаговое руководство по созданию конвейерного внедрения с помощью Captcha AI, с примерами прямого повторного...

Apr 29, 2026
Use Cases Обработка CAPTCHA при тестировании потока регистрации
Практическое руководство по Обработке CAPTCHA при тестировании потока регистрации с реалистичными сценариями, советами по рабочему процессу и практическими шага...

Практическое руководство по Обработке CAPTCHA при тестировании потока регистрации с реалистичными сценариями,...

May 04, 2026