2

셀레늄을 IE 7,8,9와 함께 사용하고 있는데 어떤 이유로 일부 CSS 3 로케이터가 IE 7과 9에서는 작동하지만 8에서는 작동하지 않습니다. 이것은 로케이터에 대한 코드입니다 :셀레늄 : IE8 CSS locators

IE 9

tab = driver.find_element_by_css_selector('ul.tabs:nth-of-type(1) li:nth-of-type(%d)' % x)

IE 7

tab = driver.find_element_by_css_selector('ul.tabs:eq(1) li:nth-child(%d)' % x)

이지만 IE 8에서는 nth-child, or :eq, or nth-of-type 로케이터를 사용하면 요소를 찾을 수 없다는 WebDriverException이 발생합니다.

또한 위의 코드는 IE 8에서 dev 콘솔을 통해 작동하지만 셀레늄에서는 셀렉트가 셀렉트로 Sizzle을 사용하기 때문에 작동하지 않습니다.

IE 8에서이 기능이 작동하지 않는 이유는 누구에게나 알려주시겠습니까? 아니면 가능한 해결 방법을 제안 해주십시오. (나는 ul.tabs:eq(1) > li:nth-child(%d)과 같은 것들을 시도했다. 즉, 셀렉터 사이에 >을 삽입했는데 작동하지 않았다.)

IEDriverServer 32 비트와 python 2.23 API를 사용하여 셀렌 서버 2.23을 사용하고있다.

+1

"셀레늄이 셀렉터로 Sizzle을 사용하기 때문일 것입니다."- Selenium1은 Webdriver/Selenium2가 아니라 Sizzle을 사용합니다. Webdriver는 CSS 선택기를 사용합니다. –

답변

2

as @ A.J는 Selenium 2는 브라우저 고유의 CSS 선택기를 사용할 수있는 경우이를 사용합니다. 따라서이 경우에는 IE 7 용 Sizzle과 IE 8 및 9 용 기본 선택기가 사용되었습니다. 분명히 IE 8의 선택기는 올바르게 처리 할 수 ​​없었습니다.

피싱 옵션을 사용하여 올바른 ul.tabs을 대상으로 설정 한 다음 + 선택기와 jQuery의 next() 메서드를 사용하여 목록을 탐색했습니다.