2014-04-04 4 views
7

현재 커서 위치 또는 이와 유사한 것을 표시하는 방법이 있습니까? 나는 어떤 객체의 정확한 점을 클릭해야하는 액션 체인을 가지고 있지만 잘못된 좌표를 선택했다고 생각합니다. 나는 Firefox webdriver를 사용한다. 나는 우리가 이것에 대한 어떤 로케이터를 사용할 수 없기 때문에 직접 해상도를 변경하기위한 가능한 모든 방법을 볼 수 없습니다셀렌의 현재 커서 위치 표시

from selenium import webdriver 
import time 
from selenium.webdriver.common.action_chains import ActionChains 

driver = webdriver.Firefox() 
driver.get("http://www.mysite/") 
elem = driver.find_element_by_xpath('//div[@id="player"][1]/object[@type="application/x-shockwave-flash"]') 
action_chains = ActionChains(driver) 
action_chains.move_to_element_with_offset(elem, 660, 420).perform() 
action_chains.click().perform() 
time.sleep(10) 
driver.close() 
+1

매우 나쁜 방법입니다. 당신은 다른 브라우저/컴퓨터/등으로이 포트를 옮기 자마자 문제를 겪게 될 것입니다. 거의 항상 마우스를 사용하지 않고 클라이언트 동작을 만드는 방법이 있습니다. 이것이 유일한 방법 일지라도 여전히 방법은 커서 위치를 사용하지 않고 그것을 할 수 있습니다. 이것이 유일한 방법 인 경우 브라우저 창을 특정 크기로 설정 한 경우에만 요소를 클릭 할 수 있습니다. 액세스하려는 웹 사이트의 URL을 제공하면 노력하고있는 것을 성취 할 수있는 더 나은 방법을 찾을 수 있습니다. –

+0

@barakmanos 의견을 보내 주셔서 감사합니다. 불행히도 페이지의 해당 개체로 작업 할 수있는 다른 방법은 없습니다. 예를 들어, http://www.jwplayer.com/에서 동영상을 시작하고 해상도를 변경하고 싶지만 API는 사용하지 않고 있다고 가정 해 보겠습니다. –

+0

나는 barak manos에 동의합니다. 일반적인 경우에는 이것을 원하지 않지만 플래시 플레이어를 클릭하려고합니다. 나는이 테스트를 수행하기 위해 좌표를 사용하는 것에 의존하지 않는 브라우저 (예 : Selenium처럼)만을 제어함으로써 작동하는 솔루션을 모른다. 그러나 Selenium과 같은 플래시 요소를 찾을 수있는 플래시 용으로 설계된 테스트 솔루션이 DOM 요소를 찾을 수 있습니까? – Louis

답변

0

: 는 다음과 같은 스크립트가 보이는 방법입니다.

예를 들어 JWPlayer의 경우 해상도를 변경할 수있는 자바 스크립트 스 니펫이있을 수 있습니다. Selenium JavascriptExecutor를 사용하면 javacript 코드를 실행하여 커서를 클릭하지 않고도 해상도 변경을 시뮬레이션 할 수 있습니다.

WebDriver driver = new ChromeDriver(); 

if (driver instanceof JavascriptExecutor) { 
    ((JavascriptExecutor) driver).executeScript(YOUR_JAVA_SCRIPT_STRING); 
} 

네이티브 JWPlayer API를 사용하고 싶지 않은 것으로 나타났습니다. 유일한 해결책으로 이것을 봅니다.

0

셀레늄의 초보자가 플래시 객체에 클릭을 생성 할 수 없다는 사실을 이해하기가 다소 어려웠습니다. 여기서 볼 수있는 유일한 해결책은 sikuli-script입니다.

프로젝트를 GitHub에서 찾았습니다 : https://github.com/kevlened/sikuli_cpython. 순수 파이썬에서 sikuli 스크립트 (자이 썬으로 작성된)를 사용할 수 있으므로 sikuli 스크립트를 작성하고 셀렌 테스트와 통합 할 수있을 것입니다.

-2

당신은 다음 방법을 사용하여 위치를 찾을 수 있습니다

WebDriver.get_window_position() 
+0

불행히도 이것은 커서 위치가 아니라 윈도우 위치를 반환합니다. – kiminoa

4

내가 불투명 한 HTML5의 I 다양한 오프셋에서 툴팁의 값을 확인했다 캔버스, 어떤 문제를 가지고 있었다!

  1. move_to_element_by_offset은 2.42 이전에 문제가 있습니다 : 내 머리를 두드리는 많은 후, 나는 몇 가지 중요한 것들을 배웠습니다. 또한 https://code.google.com/p/selenium/issues/detail?id=4215

  2. 업데이트 후에도 move_to_element_by_offset은 여전히 ​​불쾌한 것처럼 보입니다. 나는 당신이 위치를 다시 요청 위치에 민감한 요소에 걸 이제 ActionChains move_to_element 호버 (요소의 중심 기본값) 및 move_by_offset

  3. 와 두 번째 ActionChains의 조합으로 전환. 필자의 경우 툴팁 객체입니다. 이 selenium.webdriver.remote.element에는 .location['x'].location['y'] 명의 회원님의 위치를 ​​확인하는 데 필요한 회원이 있습니다. perform 후 커서 위치를 잡아 작동하지 않습니다

상황은 모든 사람에게 시간을 절약하기 위해 마우스를 가져 ActionChain 거라고 :

  • .location['x'].location['y'] 당신이 move_to_element에 전달하는 요소. 이 값은 ActionChains에 의해 업데이트되지 않습니다.
  • selenium.webdriver.remote.webdriverswitch_to_active_element; 어떤 요소가 "활성"으로 규정되는지는 명확하지 않지만 우리의 툴팁을 활성 요소로 인정하지 않고 다시 [0, 0] 좌표를 돌려주었습니다.
  • selenium.webdriver.remote.webdriverget_window_position; 문서는 약간 모호했지만 기능은 커서 위치가 아닌 창을 제안합니다.