Мне нужно зайти на сайт, который использует iframe (TrustArc), например:
<html>
<head></head>
<body>
<iframe src="https://consent-pref.trustarc.com/?type=example&site=example.com&action=notice&country=gb&locale=en&behavior=expressed&layout=default_eu&from=https://consent.trustarc.com/" id="pop-frame001407710514252325" title="TrustArc Cookie Consent Manager" tabindex="1" scrolling="no" style="border: 0px; border-radius: 2px; overflow: hidden; background: rgb(255, 255, 255); display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%;"></iframe>
Когда я бегу:
$html = $browser->visit('https://www.example.com');
$browser->driver->takeScreenshot(base_path('tests/Browser/screenshots/logged.png'));
<?php echo "<img src='/tests/Browser/screenshots/logged.png'></img>"; ?>
Я вижу, что iframe также находится за окном, когда я беру HTML и показываю на своем внешнем интерфейсе iframe.
Но когда я проверяю страницу iframe с:
$browser->assertVisible("iframe");
Я получил:
Элемент [iframe] не виден. Не удалось утверждать, что ложь является истиной.
также когда я пытаюсь:
$browser->driver->switchTo()->frame(0);
// $browser->driver->switchTo()->frame('iframe[src*="https://consent-pref.trustarc.com/?type=opentable&site=opentable.com&action=notice&country=gb&locale=en&behavior=expressed&layout=default_eu&from=https://consent.trustarc.com/"]');
Я получил сообщение
такой рамки нет
Я пытался между каждым шагом добавить сон (10); но я получил те же сообщения об ошибках.
Как я могу решить проблему? Почему я не могу перейти на iframe?
Есть идеи?
UPDATE
Я тоже пробовал:
$browser->assertSourceHas('title="TrustArc Cookie Consent Manager"');
и оно прошло, так что если есть фрейм, но я не знаю, как получить доступ к этому фрейму
ОБНОВЛЕНИЕ 2.
Я тоже пробовал это, но безуспешно:
$browser->ensurejQueryIsAvailable();
$browser->assertSourceHas('title="TrustArc Cookie Consent Manager"');
$browser->script("$('iframe').attr('name','something')");
$browser->driver->switchTo()->frame('something');
$browser->waitUntil('.call')->click('.call');
sleep(10);
$browser->driver->switchTo()->defaultContent();