2016-10-04 6 views
0

나는 다음과 같은 방법을 실행하는 동적 메뉴를 클릭하기 위해 노력하고있어 실행 후 중단 :셀레늄은 JScript를 명령

public void clicaItemSubMenu(String item) throws InterruptedException{ 
    String link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]")).getAttribute("Id"); 
    driver.get("javascript:document.getElementById('" + link + "').click()"); 
} 

코드는 잘 작동하고 메뉴가 파이어 폭스 열어 그 후, Selenium 중단되고 또는 Internet Explorer. 코드를 디버깅 할 경우 문제가 발생하지 않습니다. 나는 기다림을 다루려고했지만 성공하지 못했다. 누구든지 도와 줄 수 있습니까?

+0

이 줄의 목적은 무엇입니까? driver.get ("javascript : document.getElementById ('"+ link + "') .click()"); 페이지로 이동 하시겠습니까? 그런 다음 끝에()를 클릭하는 이유는 무엇입니까? –

+0

이 줄은 내가 필요한 메뉴 항목을 클릭합니다. 기본 click() 메소드를 시도했지만 이러한 특별한 경우에는 작동하지 않습니다. 자,이 행에서 매번 실행이 멈 춥니 다. – Brito

답변

0

사실 WebDriver::get()은 현재 브라우저 창에 새 웹 페이지를로드하는 데 사용됩니다. 이 작업은 HTTPGET 작업을 통해 수행되며 JavaScript을 사용하여 요소 클릭을 수행하려는 동안로드가 완료 될 때까지 메서드가 차단됩니다.

당신은 다음과 같이 현재 선택된 프레임 또는 윈도우의 맥락에서 JavaScript을 실행 JavascriptExecutor::executeScript() 사용하여 시도해야합니다 : -

public void clicaItemSubMenu(String item) throws InterruptedException{ 
    WebElement link = driver.findElement(By.xpath("//*[contains(text(), '" + item + "')]")); 
    ((JavascriptExecutor)driver).executeScript("arguments[0].click()", link); 
} 

을 : - 직접 link.click()WebElement::click() 방법이없는을 사용하여 WebElement 클릭 할 수 있습니다 JavascriptExecutor을 사용하십시오.

+1

와우! 이것은 잘 작동했습니다! link.click()은 대부분의 경우에는 작동하지만이 경우에는 작동하지 않습니다. 도움을 많이 주셔서 감사합니다 – Brito

+0

Ops, 죄송합니다. 수정 표시된 것으로 표시됩니다. 인스턴트 메신저 스택에 새로운 :) – Brito