2016-06-02 6 views
1

Я пишу приемочные тесты для приложения, созданные с помощью Yii Framework 2.0. Я использую Codeception и Selenium software.UnknownServerException: элемент не кликабельен в точке (X, Y)

Проблема заключается в следующем.

На странице есть div, и если щелкнуть по нему - меню появится сбоку. В этом меню есть ссылка, которая мне нужна.

Это часть HTML-код:

<div class="nav_panel"> 
    <div class="menuButton" id="np1" title="Menu"><b>Main menu</b><i></i><i></i><i></i></div> 
      <div class="np np5" id="np5" title="Tree" onclick="window.location.href = '/roles/controllermodule/tree'"> 
      <span class="glyphicon glyphicon-tree-deciduous"></span> 
     </div> 
     <div id="scrollUp" class="npt glyphicon glyphicon-circle-arrow-up" title="Up"></div> 
      <div class="np np6" id="np6" title="TestIt" onclick="window.location.href = '/gtest/gtest/index'"> 
     <span class="glyphicon glyphicon-wrench"></span></div> 
       <div class="np np7" id="np7" title="Clear DB Cache" onclick="$.ajax({type: 'GET',url: '/roles/role/schemarefresh'});"> 
     <span class="glyphicon glyphicon-refresh"></span></div> 
      <div class="np np1" id="np2" title="Reports"><span class="glyphicon glyphicon-file"></span></div> 
    <div class="np np2" id="np3" title="Documents"><span class="glyphicon glyphicon-envelope"></span></div> 
    <div class="np np3" id="np4" title="Profile"><span class="glyphicon glyphicon-user"></span></div> 
    </div> 

Вот di v, которую я пытаюсь нажать:

<div class="np np3" id="np4" title="Profile"><span class="glyphicon glyphicon-user"></span></div> 

В тесте я могу видеть, что div:

$I->seeElement(['xpath' => './/div[@id="np4"]']);

Но когда я пытаюсь подражать Клик на него - тест терпит неудачу с ошибкой:

[37;41m
[39;49m [37;41m [UnknownServerException] unknown error: Element is not clickable at point (21, 729). Other element would receive the click: (Session info: chrome=50.0.2661.102) (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Windows NT 10.0 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 27 milliseconds Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 17:00:58' System info: host: 'DESKTOP-Q4B9M7G', ip: '.....', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.7.0_79' Session ID: ... Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{platform=WIN8_1, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={userDataDir=C:...\scoped_dir11496_1013, chromedriverVersion=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4)}, rotatable=false, locationContextEnabled=true, mobileEmulationEnabled=false, version=50.0.2661.102, takesHeapSnapshot=true, cssSelectorsEnabled=true, databaseEnabled=false, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, hasTouchScreen=false, applicationCacheEnabled=false, takesScreenshot=true}] [39;49m [37;41m
[39;49m [33m Scenario Steps: [39m [1m 36. $I->click(".//div[@id="np4"]")[22m at [32mcodeception\acceptance\LoginCept.php:51[39m 35. $I->seeElement({"xpath":".//div[@id="np4"]"}) at [32mcodeception\acceptance\LoginCept.php:50[39m

Я предположил, что, возможно, образ glyphicon-user перекрывает div элемент и попытался удалить его в тесте:

$I->executeJS('$(".glyphicon-user").remove();');

Но это не помогло.

Как я могу подражать клику на div с помощью Codeseption? Я был бы очень благодарен за информацию. Спасибо всем.

+1

Какова ошибка, которую вы получаете? – noor

+0

Спасибо за ваш комментарий. Теперь я снова запускаю тест и пишу, что это за ошибка. –

+0

Я получаю эту ошибку: '[UnknownServerException] неизвестная ошибка: Элемент не кликается в точке (..., ...). Другой элемент получит клик'. Я обновил вопрос. –

ответ

0

Вот что мне помогло.

Я удалил тег span, как показано ниже, и добавил задержку:

$I->executeJS('$(".glyphicon-user").remove();'); 
$I->wait(10); 

$I->click('div.np.np3#np4[title=\'Profile\']'); 
$I->wait(5); 

Теперь все в порядке.


Также может потребоваться вызвать действие ng-click. Например, для кнопки, такой как:

<button 
type="button" 
ng-click="addNewBlock(model.Languages)" 
ng-hide="model.Languages.elem.length == model.Languages.max" 
class="">Add</button> 

Эта кнопка динамически добавляет блоки к странице. Для вызова ng-click вы можете написать:

$I->executeJS('$(\'button[ng-click="addNewBlock(model.Languages)"]\').click();'); 

Если кнопка находится в нижней части экрана, вы можете выполнять прокрутку там:

$I->executeJS('window.scrollTo(0, document.body.scrollHeight);'); 

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

$I->executeJS('document.getElementById("some-id").scrollIntoView();'); 
$I->click('//*[@id="some-id"]');