2011-10-25 4 views
4

Selenium 2.0 WebDriver에서 CSS 선택 도구를 사용하여 단추를 클릭하려고합니다. 문제는 Selenium RC에서 실행할 수있는 스크립트가 WebDriver에서 작동하지 않는다는 것입니다. 코드 :Selenium WebDriver cssSelector 문제

셀레늄 RC : 절대적으로 잘 작동

selenium.click("css=.gwt-Button:contains('Run Query')"); 

.

셀레늄 WebDriver :

driver.findElement(By.cssSelector(".gwt-Button:contains('Run Query')")).click(); 

작동하지 않습니다. Firefox 버전 5.0의 selenium-server-standalone-2.9.0.jar을 사용하고 있습니다. 누구나 cssSelector이 WebDriver와 함께 작동하지 않는 이유를 알아낼 수 있습니까?

+0

당신은 당신이 <= "버튼"클래스 = "GWT-버튼"ID = "EXT-gen362"버튼 타입> – CBRRacer

+0

을 선택하려고하는 요소 쿼리 실행을 표시 할 수 있습니다하지만 난 ID를 사용할 수 없습니다 그것은 동적으로 genaratetd입니다. – Swagatika

+0

@Swagatika : id가 동적으로 생성됩니다. id의 전체 텍스트가 동적으로 생성 되었습니까? 또는 동적으로 생성 된 ID의 마지막 부분입니까? 여기에서 id = "ext-gen362". ext-gen이 고정되고 값 (362) 만 변경되는 경우 xpath with contains 또는 starts-with을 사용할 수 있습니다. –

답변

8

'포함'은 CSS 3에서 더 이상 사용되지 않습니다. Webdriver는 브라우저에서 기본적으로 지원하는 모든 것을 지원합니다. RC는 셀 선택기에 Sizzle 라이브러리를 사용하고 '포함'을 지원하기 때문에 셀렌 RC에서 작동합니다. 같은 것을 시도해 보셨습니까

고유하지 않은 경우 더 자세히 필터링해야 할 수도 있습니다. 사이트에서 jQuery를 사용하는 경우 jQuery에서 'contains'선택자를 사용할 수 있습니다.

JavascriptExecutor js = ((JavascriptExecutor)driver); 
WebElement element = (WebElement) js.executeScript("return $(\".gwt-Button:contains('Run Query')\")[0];"); 
element.click(); 
+0

답장을 보내 주셔서 감사합니다. 네, 지글 지글 도서관에 주사해서 작동시킬 수 있습니다. – Swagatika

+1

응용 프로그램에서 jQuery를 사용한다면 아마도 sizzle 라이브러리를 삽입하고 DOM을 오염시킬 필요가 없을 것입니다. AFAIK, sizzle은 jQuery의 CSS 선택기 엔진으로 사용됩니다. 이 경우 내가 언급 한 두 번째 해결책은 제대로 작동 할 수 있습니다. – nilesh

+0

그래, 문제는 내 응용 프로그램이 JQuery를 사용하지 않는다는 것인데, 왜 내가 Sizzle을 별도로 사용해야하고 contains() 메소드를 작동시켜야하는지이다. 도와 주셔서 정말로 고맙습니다. – Swagatika

0

구문이 유효하게 보이고 테스트 페이지에 일부 요소를 놓은 다음 내 콘솔로 이동하여 $ ("gwt-Button : contains ('Run Query') ')를 수행했을 때 길이가 1 버튼의 텍스트를 변경했습니다. 그래서 내가 생각할 수있는 유일한 것은 페이지에 존재하지만 표시되지 않고 실행 예외가 발생하는 쿼리 실행 버튼이있을 수도 있습니다. 그것을 클릭하기 전에 표시되는지 확인하기를 원할 수 있습니다. 또는 요소 목록을 만든 다음 모든 숨김 (display == false) 요소를 제거합니다.