Функция mouseOver() не работает, когда браузер свернут

Мне нужно навести курсор на элемент и щелкнуть ссылку на оверлее, которая появляется при наведении на элемент div. Я использую функцию mouseOver(), и она отлично работает, когда браузер находится в области просмотра. Однако, если я сворачиваю браузер, наведение мыши не работает и выдает следующую ошибку.

«Элемент в настоящее время не виден, поэтому с ним нельзя взаимодействовать (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека)». Может ли кто-нибудь помочь мне в этом, пожалуйста?

Я пользователь behat\mink\selenium2driver


person user2596377    schedule 23.05.2014    source источник
comment
И это помечено PHP, потому что?   -  person Mark Baker    schedule 23.05.2014
comment
Behat — это BDD для PHP!   -  person user2596377    schedule 23.05.2014
comment
Я знаю о Behat, но вы комментируете проблему, которая кажется чисто javascript () mouseOver не является функцией PHP в прошлый раз, когда я проверял.... и вы даже не упомянули javascript в своих тегах   -  person Mark Baker    schedule 23.05.2014


Ответы (1)


Окно браузера должно быть в фокусе, чтобы Selenium мог надежно им управлять. Если вы взаимодействуете с браузером, это приведет к мерцанию тестов.

Таким образом, сообщение, которое вы получаете: «Элемент в настоящее время не виден, и поэтому с ним нельзя взаимодействовать», буквально является проблемой: Selenium не видит элемент, потому что окно браузера не отображается.

Что вы можете сделать для устранения подобных проблем, так это сделать снимок экрана при сбое. Добавьте в файл FeatureContext.php следующее:

public function writeDebugInfoAfterFailedStep($event)
{
  if (4 === $event->getResult()) { // if step failled
    $driver = $this->getSession()->getDriver();
    $outputFile = 'behat_' . date("Y-m-d H:i:s");

    if (($driver instanceof Selenium2Driver)) {
        $outputFileImg = $outputFile . '.png';
        $this->saveScreenshot($outputFileImg, "screenshots/");
    }
    $content = $this->getSession()->getPage()->getContent();
    $outputFile = $outputFile . '.html';
    file_put_contents("screenshots/" . $outputFile, $content);
    return;
  }
}

Затем вы должны получить снимок экрана в каталоге «скриншоты» (сначала вам нужно создать этот каталог).

Другая ситуация, когда возникает эта проблема, — это когда селектор соответствует нескольким элементам и пытается взаимодействовать с не тем, который не виден. Это может произойти, например, если CSS страницы недействителен и несколько элементов имеют одинаковый идентификатор. Решение: улучшите свой селектор, чтобы получить правильный элемент.

И если это не поможет, вот условия, которые определяют, видит ли веб-драйвер Selenium элемент или нет: https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#determining-if-an-element-is-displayed (Проверяйте не только видимость элемента, но и видимость его родителей).

person user2707671    schedule 27.05.2014