2016-11-03 2 views
1

목록 외부에서 클릭 할 때 필드를 업데이트 할 요소를 목록에서 선택하려고합니다. 나는 단지 하나의 이벤트가있을 경우 아래의 코드는요소 외부에서 누르기가 작동하지 않습니다.

Actions action = new Actions(driver); 
EventGrid.FindElement(By.XPath("//div[contains(.,'" + nameToBeClicked + "')]")).Click(); 
// Forces a click outside element to fire the triggers 
EventGrid.FindElement(By.XPath("//html")).Click(); 

Notice only one event under the name catgory

을 (그림 참조)하지만 (통지 그림에서 두 개의 이벤트가 두 개의 이벤트가있을 때 작동하지 않습니다 작동 이제 하나의 새로운 이벤트와 다른 부페 식 아침 식사). 드롭 다운에서 뷔페 아침 식사를 클릭하는 메소드에 이벤트 이름을 전달하지만 html 로의 클릭은 위의 그림에서만 작동하지만 아래에서는 그렇지 않습니다. 어떤 아이디어가이 문제를 어떻게 해결할 수 있습니까? HTML을 목록의

enter image description here

:

<div id="boundlist-1193" class="x-boundlist x-boundlist-floating x-layer x-boundlist-default x-border-box" tabindex="-1" style="right: auto; left: 100px; top: 97px; height: auto; width: 150px; z-index: 29001;" data-selenium-id="EventGrid-EventClassificationName-list"> 
 
    <div id="boundlist-1193-listEl" class="x-boundlist-list-ct x-unselectable" style="overflow: auto; height: auto;" role="presentation"> 
 
    <ul class="x-list-plain"> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Buffet Breakfast</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>NotMarkedAsPosted</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Afternoon Break</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Dinner</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Lunch</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Package Morning Break</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Party Hard</div> 
 
     </li> 
 
     <li class="x-boundlist-item" unselectable="on" role="option"> 
 
     <div>Unassigned</div> 
 
     </li> 
 
    </ul> 
 
    </div> 
 
</div>

+0

셀레늄을 사용하는 것 같습니다 ... 다른 드라이버를 사용해 보셨습니까? 또는 첫 번째 클릭이 실행 된 후 html 요소가 EventGrid 내에 있는지 확인하십시오. 아마도 그것은 사전에 있고 후에는 아닙니다. 또 다른 생각은 ... 클릭 사이에서 WebDriverWait를 사용하려고합니다. – Bret

+0

이 링크는 당신의 문제를 해결할 것이라고 생각합니다. http://stackoverflow.com/questions/40220377/how-to-click-on-new-div-which-newly-generates-after-clicking-on-a-button-in/40232966#40232966 –

+0

요소를 클릭하면 셀레늄은 요소의 가운데를 클릭합니다. 현재 라인 등의 이름 필드와 같은 알려진 위치를 클릭하고 도움이되는지 확인하는 것이 좋습니다. – JeffC

답변

1

다음 코드를 사용하여 클릭 수를 달성했습니다. html 태그가 떨어져서 원격이되는 여러 이벤트가있는 것 같습니다. 아래 코드를 검토하십시오. 또한 목록의 한 멤버 만 반환하는 이름을 입력 할 때 문자열 매개 변수를 제거했습니다. 내가 이해에서

EventGrid.FindElement(By.XPath("//li/div")).Click(); 
RemoteWebElement element = (RemoteWebElement)driver.FindElement(By.XPath("//html")); 
var scrollIt = element.LocationOnScreenOnceScrolledIntoView; 
element.Click(); 
2

당신은 당신이 당신의 옵션을 선택한 후 좌표로 클릭을 수행 할 수 있습니다.

action.MoveByOffset(x, y).Click().Perform(); 
+0

어떤 좌표를 사용합니까? –

+0

시작하기 위해 200, 200 시도 할 수 있습니다. – Ievgen

+1

여기에 수락 된 답변을 확인하십시오 .http : //stackoverflow.com/questions/25374013/selenium-click-on-coordinates-not-clicking-where-expected. 정확히 클릭이 수행 된 위치가 표시됩니다. – Ievgen

0

은, 당신의 목표는 onfocusout 이벤트가 트리거 얻는 것입니다. 나는이 문제를했고이 (당신이 원하는 경우 태그와 같은 HTML을 사용할 수 있습니다), 몸에 무엇이하는 것은

driver.find_element_by_tag_name('body').send_keys(Keys.TAB)

보내는 내 문제 탭 키 이벤트를 해결합니다. 나는 실제 사용자의 가장 선호하는 행동이므로이 사용법을 사용합니다.

관련 문제