2013-04-19 1 views
3

HTML 드롭 다운 메뉴의 모든 옵션을 선택할 코드를 작성하려고합니다. 내가해야한다고 생각하는 다음 코드를 작성했습니다.셀렌에서 ID에 마침표가있는 요소는 어떻게 선택합니까?

public void testSelectMultipleOptions() { 
    // code to get to report page 
    selectAllOptions("param.Status"); 
    // code to run report and switch to the result page 
} 

public void selectAllOptions(String htmlID) { 
    List<WebElement> options = selenium.findElements(By.cssSelector("select#"+htmlID+" > option")); 
    for(WebElement option: options) { 
     option.click(); 
    } 
} 

이 코드를 실행하면 드롭 다운에서 옵션이 선택되지 않습니다. 내가 가진 문제는 ID에 마침표가있는 HTML 요소가 있지만 그 페이지의 HTML 코드를 변경할 수있는 능력이 없다는 것입니다.

+0

'findElements (By.Id (htmlId));'를 사용 해보려고 했습니까? .NET 바인딩에는 드롭 다운 목록에 대한 Selector 클래스가 있습니다. 다른 바인딩과 비슷하고 select 요소에서 사용할 수 있다고 상상해보십시오. – Nashibukasan

답변

4

매우 놀랍게도 개발 실천이 있습니다. 나는 당신이 그것을 바꿀 능력이 없다는 것을 알고 있지만, 할 수 있다면, 그것은 매우 나쁘다는 것을 지적합니다. 왜? 두 가지 이유.

CSS에서 클래스를 기반으로하는 규칙은 일반적으로 마침표로 시작합니다.

jQuery/Sizzle을 비롯하여 셀레늄이 수행하는 것과 같은 CSS 선택기 프레임 워크에서 마침표는 주로 많은 규칙에 따라 요소를 선택하는 특별한 의미가 있습니다. 이것이 여기에있는 이유입니다. CSS 셀렉터를 Chrome이나 Firebug로 직접 실행하면 똑같은 것을 볼 수 있습니다.

요소 ID의 마침표를 사용하면이 모든 문제가 발생합니다. Annoyingly HTML 스펙은이를 허용합니다.

어쨌든, 모든 것이 손실되지 않습니다. 주변에는 여러 가지 방법이 있습니다.

첫째, 당신이 그것을 피할 수

select#param\\.Status 

둘째, 당신은 약간 더 정교한 선택 사용할 수 있습니다

//select[@id='param.Status'] 
: 마지막으로

select[id='param.Status'] 

을, 당신은 XPath를 사용할 수 있습니다

+0

내가 일하는 회사는 내가 거기에서 일하기 시작하기 전에 어떻게 든 내가 그들의 마음을 바꿀 것이라고 생각하지 않기 때문에 그렇게 해왔다. – EsotericNonsense

관련 문제