Laravel Dusk - Элемент [iframe] не виден - PullRequest
1 голос
/ 28 мая 2019

Мне нужно зайти на сайт, который использует iframe (TrustArc), например:

<html>
    <head></head>
    <body>
        <iframe src="https://consent-pref.trustarc.com/?type=example&amp;site=example.com&amp;action=notice&amp;country=gb&amp;locale=en&amp;behavior=expressed&amp;layout=default_eu&amp;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&amp;site=opentable.com&amp;action=notice&amp;country=gb&amp;locale=en&amp;behavior=expressed&amp;layout=default_eu&amp;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();
...