2012-07-20 3 views
2

나는 그렇게Selenium Webdriver + Ruby regex : find_element와 함께 정규식을 사용할 수 있습니까?

edit_div_123

edit_div_124

edit_div_xxx

처럼 각 주마다 변경하는 요소를 클릭하려고 XXX = 모든 세 개의 숫자

내가 좋아하는 정규식을 사용하여 시도 so :

@ driver.find_element (: css, "#edit_order _ # {\ d *}> d ivmit> button [name = \ "commit \"] ")을 클릭하십시오.

@ driver.find_element (: xpath,"// * [(@ id = "edit_order _ # {\ d *}")] //button").click

이게 가능합니까? 이 일을하는 다른 방법은 없습니까?

답변

0

아니요, 할 수 없습니다.

그러나이 같은 수행해야합니다

function hasClass(element, className) { 
    var re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)'); 
    return re.test(element.className); 
} 
2

을 당신은 더 작업중인 모든 HTML 조각을 제공 없습니다. 따라서 제 대답은 단지 귀하의 질문에 제공된 제한된 입력을 기반으로합니다.

WebDriver API가 요소 찾기에 정규 표현식을 지원하지 않는다고 생각합니다.

//*[starts-with(@id, 'edit_div_')]//button 

설명 : 그러나 다음과 같이 그냥 일반 XPath를 사용하여 원하는 것을 얻을 수 있습니다 XPath는 누구 id 속성 모든 요소 아래에 존재하는 모든 <button> 노드를 검색하려고합니다 위의 문자열로 시작 edit_div_

즉, starts-with() xpath 함수를 사용하여 요소를 ID 형식과 일치시킬 수 있습니다. edit_div_ followed by any number of characters

+0

근무 – longJOURNEY

2

다른 답변과 마찬가지로 Regexp를 사용할 수 없습니다. 사용

@driver.find_element(:css, "[id^=\"edit_order_\"] > div.submit > button[name=\"commit\"]").click 

:

대신, 당신은 멋진 CSS 선택기 트릭을 사용할 수 있습니다

  • ^= 당신의 기준으로 시작하는 값을 가진 요소를 찾아냅니다.

  • * =이 기준은 어디서나 요소의 값에서 찾을 수해야한다고 말했습니다 $ =이 값의 끝에 당신의 기준과 요소를 찾아냅니다

  • .

  • ~ = 실제 값에 공백으로 구분 된 값 목록이 여러 개있는 경우 하나의 기준에 따라 요소를 찾을 수 있습니다.

유틸리티 벨트에 추가해야하는 다른 멋진 CSS 트릭에 대한 자세한 정보는 http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/을 참조하십시오! . 클릭 ("// * 버튼 [시작 -와 (@id, 'edit_div _')]", XPath는)

0

이 날

@driver.find_element(:xpath, "//a[contains(@href, 'person')]").click 
이 나를 위해 일
관련 문제