2011-12-13 1 views
0

내 웹 페이지에 간단한 원숭이 테스트를하고 있는데, 페이지에서 모든 활성 요소를 가져 와서 무작위 순서로 클릭합니다. 나는이 작업을 수행 할 때Webdriver에서 모든 속성 또는 xPath 요소 가져 오기

나는 시험

그래서 내가

01.01.11 11.01.01 Clicked on Element <span id='myspan' class ='myclass .....> 
01.01.11 11.01.01 Clicked on Element <span id='button' class ='myclass title = 'Button'.....> 

또는

같이하는 로그 파일을 원하는 추락하는 요소 내 테스트 클릭에와있는, 알고 로그를 작성하려면
01.01.11 11.01.01 Clicked on Element //*[@id='myspan'] 
01.01.11 11.01.01 Clicked on Element //*[@id='button'] 

Webdriver + Ruby에서 어떤 방법을 사용합니까?

답변

1
내가 거기있는 방법입니다하지만 당신은 항상 (Watir과 - webdriver와) 같은 것을 할 수 있다고 생각하지 않습니다

: 이러한 유형의 기능을 제공하지 않습니다

browser.divs.each do |div| 
    puts '<span ' + ['id','class','title'].map{|x| "#{x}='#{div.attribute_value(x)}'"}.join(' ') + '>' 
end 
+0

아니요, 이것은 아닙니다. 이 요소는 예제를 통해서만 입력합니다. 일부 요소는 '클래스'또는 'id'속성을 가질 수도 있습니다. 일부는 – ShockwaveNN

+1

을 갖지 않을 수도 있습니다. 그러나 나는 이것이 당신이 얻는 것만 큼 가까운 것이라고 생각합니다. – pguardiario

1

WebDriver, 당신은 얻을 것을

1

당신은이 작업을 수행 할 수 있습니다

    를 - 페이지 소스와 자신의 해석의 일부 않는 내가 C 번호와 html로 민첩성 팩에 이런 짓을 한, 당신은 루비 ( Options for HTML scraping? 참조) 비슷한 라이브러리를 찾을 필요가있을 것이다
  1. 클릭 가능한 모든 요소 얻기 예 : 모든 링크를 찾고 클릭 가능한 모든 기간을 찾습니다. 목록에서 후보자를 넣어하는 것은

  2. 무작위로 매우 요소를 클릭하면 그 후보 목록

  3. 의 요소를 선택하고 일부 로그를 쓰기

    나는이 방법을 마련하기 @의 pguardiario의 답변을 쥐게
+0

그리고 요소의 XPath 또는 모든 속성을 어떻게 얻을 수 있습니까? – Anders

+0

왜 XPath를 사용하고 있습니까? 자동화에서 XPath는 악마입니다. ID를 사용하는 것이 좋습니다. 심지어 클래스가 XPath보다 낫다. – maguschen

+0

XPath 자체는 악의가 아니지만 때로는 사람들이 사용하는 방식이 꽤 나쁘다. 그것을 사용하는 방법을 안다면, 강력하고 다재다능합니다 (그리고 전혀 부서지기 쉽지 않습니다.) 일단 배웠다면 다시 돌아갈 수 없습니다. – Anders

1

:

def get_element_dom_info(@e) 
    if @e.class != Selenium::WebDriver::Element 
    raise "No valid element passed: #{@e.class}" 
    end 
    @attrs = ['id', 'class', 'title', 'href', 'src', 'type', 'name'] 
    return "<" + @e.tag_name + @attrs.map{ |x| " #{x}='#{@e.attribute(x)}'" if @e.attribute(x) && @e.attribute(x) != "" }.join('') + ">" 
end 

물론 매개 변수로 전달되는 단일 매개 변수는 실제 Selenium 요소입니다. 또한 모든 가능한 속성을 포함하지는 않지만, 대부분 속성입니다 (필요할 경우 언제든지 추가 속성을 추가 할 수 있습니다).

나는이 같은 일부 코드를 통해이 문제를 통합 할 수 있습니다 가정 :

def clickElement(*args) 
    ... # parse vars 
    @e = @driver.find_element(...) 
    puts get_timestamp + " Clicked on Element: " + get_element_dom_info(@e) 
end 

나는 최근에 내가 네이티브 자바 스크립트를 사용하여 요소의 전체 HTML을 얻을 수 있다는 것을 깨달았 UPDATE (오 드를!). "outerHTML"을 얻으려면 해킹을 사용해야합니다. 여기 내 새로운 방법이 있습니다 :

def get_element_dom_info(how, what) 
    e = @driver.find_element(how, what) 

    # Use native javascript to return element dom info by creating a wrapper 
    # that the element node is cloned to and we check the innerHTML of the parent wrapper. 
    return @driver.execute_script("var f = document.createElement('div').appendChild(arguments[0].cloneNode(true)); return f.parentNode.innerHTML", e) 

end