2016-06-02 2 views
1

Yii Framework 2.0을 사용하여 만든 응용 프로그램에 대한 수락 테스트가 있습니다. CodeceptionSelenium 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-userdiv 요소 겹치는 것을 제안하고, 시험에서 그것을 제거하려고 :

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

그러나 도움이되지 않았다.

Codehope을 사용하여 div을 어떻게 에뮬레이트 할 수 있습니까? 나는 그 정보에 대해 매우 감사 할 것입니다. 모두에게 감사드립니다.

+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); 

이제 모든 것이 OK입니다.


또한 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"]');