2016-08-04 2 views
1

내가 거기, 그 인덱스로 동일한 유형의 여러 노드 중 특정 노드를 선택하려면 다음과 같은 방법이 있습니다.사용`배열 # []`발견`대 ("... : n 번째 자녀 (N)")`

some_table_node.find("tr:nth-child(3)").find("td:nth-child(5)") 

some_table_node.all("tr")[2].all("td")[4] 

어느 쪽이 더 낫습니까? 당신이 선호하는 주장을 할 수 있습니까?

답변

1

find 대기, all하지 않습니다. 일반적으로 이것은 find이 부서지기 쉽고 (우월 함) 의미합니다. 당신은 또한 전자를 단순화 할 수 있어야한다 :

some_table_node.find("tr:nth-child(3) td:nth-child(5)") 
+0

TBODY의 3 행을 반환합니다, 반면 all 쿼리는 TBODY의 두 번째 행을 반환합니다 그것을 하나로 모으는 것. 나는 그것을 놓쳤다. – sawa

+0

이 대답은 정확하지 않습니다.'all'은 기본적으로 대기하지 않지만, 카운트, 최소값, 최대 값, 또는 옵션들 사이에서 기다릴 것입니다. –

2

허용 대답은 실제로하지 all 이후 큰 차이는 카운트 옵션 중 하나를 전달하여 대기하도록 만들 수 있습니다. 두 가지의 실제 차이는 all (및 first)의 결과가 자동으로 다시로드 될 수 없다는 것입니다. 즉, 요소를 저장하고 페이지에서 요소가 대체 된 후에 요소를 사용하려고하면 더 이상 사용되지 않는 노드 오류가 발생합니다. find을 사용하면 일치하는 요소를 찾아 재로드하려고 시도합니다. 작은 이점은 find 호출에 데이터 전송이 적어지기 때문에 속도가 약간 빨라진다는 것입니다.

검색어가 항상 같은 것은 아니라는 점에 유의하십시오. 여러 TRS와 TBODY 다음 표에서 하나의 TR과 THEAD이있는 경우 find 당신은 맞다

<table id="some_table"> 
    <thead> 
    <tr> 
    <th>...</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr>...</tr> 
    <tr>...</tr> <= some_table_node.all('tr')[2] will return this 
    <tr>...</tr> <= some_table_node.find('tr:nth-child(3)') will return this 
    <tr>...</tr> 
    </tbody> 
</table> 
+0

'find'는 데이터 전송량이 적 으면 안됩니까? 아마도 모호한 일치를 탐지하기 위해'FindElements' 명령을 드라이버에 보냅니다. –

+1

@FlorentB. 예'all ('tr') [2]'는 모든 행에 대한 정보를 반환하고 나머지 정보를 버리는 세 번째 항목을 선택합니다. 'find ('tr : nth-child (3)')'는 셀렉터와 일치하는 행에 대한 정보만을 반환합니다. 둘 이상이 반환되면 모호한 일치를 발생시킵니다. –

+0

6 항목 :'find_element' : 31ms,'find_elements' : 31ms,'find' : 73ms,'all' : 277ms. 원시'find_element' /'find_elements'는 비용이 명령을 보내기 때문에 동일합니다. 그러나'find '는'find_element'의 두 배이고'all'은 8 번입니다. 나는'find'와'all'도 각 엘리먼트에 대해 추가 명령을 보내어 가시성을 점검한다는 것을 알게되었습니다. –