2012-01-06 7 views
0

간단한 필요 : 특정 HTML 요소의 모든 innerhtml이 고유하도록 HTML 소스를 수정하는 방법. 간단한 예를 통해 더 명확하게 설명 할 수 있습니다.Selenium Locator를 고유하거나 내부 HTML 고유하게 만드는 방법

<html> 
<a href="/hello/doit.do"><img src="Button.bmp" border="0"></a> 
<a href="/hello/doit.do">A Real Link</a> 
</html> 

사용자가 알게되면 텍스트 링크 및 이미지 링크로 표시됩니다. 다음과 같이 CSS 로케이터를 구성하여 속성을 사용하여이 요소를 찾으려면 :

loc = 'css=a[href="/hello/doit.do"]' 

셀렌은 두 가지 요소를 찾습니다. Python 2.7에서 Selenium RC Client를 사용하여 임의의 숫자를 ID 속성으로 추가하여 구분할 수 있습니다. 내 질문은, 어떻게 모든 일반적인 innerHTML 루프 및 난수를 추가 할 수 있습니다?

지금까지 내가 아는 한,

get_css_count(loc) 

만이 얻을 당신이 수 = 나는 고유 한 속성을 삽입하기 위해 그 각각의 내부 HTML입니다 필요한 것은 2.?

짧은 이야기, 셀레늄은 get_attribute(attributeLocator)이고, 알고 싶습니다. set_attribute(attributeLocator, value)이 있습니까?

+0

일부 JS를 실행하여 html을 변경할 수 있습니다. xpath를 사용 하시겠습니까 – malletjo

+0

"some JS"에 관해 좀 더 자세히 설명해 주시겠습니까? 그리고 왜 내가 CSS를 사용할 수 없습니까? – abarik

+0

CSS 대신 xpath 선택기를 사용하십시오. http://stackoverflow.com/questions/8764856/selenium-css-locator-all-attribute-options-with-and-without-being-strict/8772313#8772313 –

답변

0

정말 Selenium을 사용하여 DOM을 수정해야합니까? @racar (예를 들어 jQuery를위한) 제안 당신은 페이지의 js를 사용하여 DOM을 변경할 수 있습니다 : 모든 링크 ID를 "LINK_1", "LINK_2"... 추가됩니다

$(function() { 
    var i = 1; 
    $('a[href="/hello/doit.do"]').each(function() { 
     $(this).attr('id', 'link_' + i); 
     i += 1; 
    }); 
}); 

.

또는 직접 HTML을 렌더링하는 경우 HTML을 렌더링 할 때 해당 ID를 추가 할 수 있습니다. 실제 작업을 공유하고 링크를 분리해야하는 이유가 있다면 더 나은 솔루션을 제안 할 수 있습니다.

+0

" HTML을 렌더링 할 때 ID를 추가 할 수 있습니다. "왜 그렇게 생각하지 않았습니까? 굉장해 ... 고마워 !! 어떤 경우 이건 나를위한 진짜 거래 다. 그래서 내가 더 나은 방법을 제안 할 수 있도록 내가 성취하고자하는 것을 상세하게 1 단계로 설명한다. mayukhbose.com/elements.html Cont ... 다음 댓글에서 계속 – abarik

+0

여기 계속 ... 내가 원하는 것은 파이썬에서 상호 작용을 자동화 할 수있는 간단한 메소드/함수를 만드는 것입니다. HTML 요소들. 예 : click_button (button_name = '데이터 전송'). Selenium의 Python Client를 사용하여이 메소드를 쉽게 작성할 수있다. 그러나 Selenium의 Python Client는 요소 로케이터 만 매개 변수로 사용합니다. 이제는 웹 페이지에있는 텍스트를 기반으로 이러한 로케이터를 어떻게 든 생성해야합니다. 이 작업은 웹 페이지를 구문 분석하여 수행 할 수 있습니다 (BeautifulSoup는 정말 유용합니다). 내 아이디어를 얻길 바랍니다. 감사합니다, Amit – abarik

+0

당신은 그 HTML 페이지를 생성합니까? 그렇다면 id와 같은 고유 매개 변수를 추가하는 것이 내가 생각하는 최선의 솔루션이 될 것이므로 선택기가 작고 명확하며 모호성이 없을 것입니다 (하나의 선택기가 여러 요소와 일치합니다). 그러나 XPath 선택자에서'contains()'함수를 사용하여 텍스트를 찾을 수 있습니다 : // a [contains (text(), 'Some case-sensitive text')]'또는'// a [contains (., ' 다른 텍스트)]'. 사용할 수있는 [기타 많은 기능] (http://www.w3schools.com/xpath/xpath_functions.asp)이 있습니다. – demalexx

관련 문제