2012-07-05 3 views
42

WebDriver의 selenium.focus()은 무엇입니까?Java를 사용하여 Selenium WebDriver에서 요소를 포커스하는 올바른 방법

element.sendKeys(""); 

또는

new Actions(driver).moveToElement(element).perform(); 

나는 그들 모두를 시도하고 그들은 일을하지만, 어떤 사람은 항상 모든 요소 일 것이다?

어떤 요소 (버튼, 링크 등)에 올바른 방법은 무엇입니까? 이 기능은 다른 UI에서 사용되기 때문에이 점이 중요합니다.

답변

44

다음 코드 -이 이미지 요소 작동으로

new Actions(driver).moveToElement(element).perform();

이 더 적합하면서

element.sendKeys("");

시도는 몇 가지 정보를 입력하는 입력 된 태그 상자를 찾을 수 링크 요소, 드롭 다운 상자 등

그러므로 moveToElement() 메서드는 웹 페이지의 일반 WebElement에 초점을 맞추는 것이 좋습니다.

입력란의 경우 초점을 지정할 요소에 ()을 클릭해야합니다.

new Actions(driver).moveToElement(element).click().perform();

링크와 이미지가 마우스가 특정 요소 이상이 될 것입니다 위해, 당신은 당신이 원하는 무슨에 따라 그것을()을 클릭 결정할 수 있습니다 동안

.

if("input".equals(element.getTagName()){ 
    element.sendKeys(""); 
} 
else{ 
    new Actions(driver).moveToElement(element).perform(); 

} 
-이 기능은 일반적인되고 싶어 때문에 webElement에 의해 입력 태그인지 아닌지

, 당신은 먼저 확인 -

입력 태그의 클릭()가 작동하지 않는 경우

사용자 환경 설정에 따라 비슷한 변경을 할 수 있습니다.

+0

입력란에서도 작동합니까? – questions

+0

수정 된 답변이 도움이되는지 알려주세요. –

+0

그게 효과가있다. 고마워 친구! :) – questions

11

당신은 다음과 같이 JS를 사용할 수 있습니다

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor jse = (JavascriptExecutor) driver; 
jse.executeScript("document.getElementById('elementid').focus();"); 
1

FWIW을, 나는 관련 문제가 생각이 있었다했으며, 대안으로 내놓았다 : 내가 document.execCommand을했던 크롬 확장을 썼다 ('붙여 넣기 ')를 윈도우 언로드에 중점을 둔 텍스트 영역에 추가하여 요소를 시스템 클립 보드 내용으로 채 웁니다. 이 작업은 수동으로 100 % 일했으나 execCommand는 Selenium에서 실행할 때 거의 항상 false를 반환했습니다.

초기 driver.get (myChromeExtensionURL) 다음에 driver.refresh()를 추가 했으므로 이제는 100 % 시간을 사용합니다. 이것은 Selenium 드라이버 버전 2.16.333243 및 Mac OS 10.9의 Chrome 버전 43에서 발생했습니다.

문제를 조사 할 때이 해결 방법에 대한 언급이 없으므로 Selenium/focus/execCommand ('paste') 발자취의 다음 내용에 대한 검색 결과를 문서화한다고 생각했습니다.

1

창이 초점을 맞춘 경우에만 포커스가 작동합니다.

((JavascriptExecutor)webDriver).executeScript("window.focus();");을 사용하십시오.

관련 문제