Окно браузера должно быть в фокусе, чтобы 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
PHP
, потому что? - person Mark Baker   schedule 23.05.2014