2013-09-26 3 views
0

저는 Bhat에서 Behat | Mink를 통해 일해 왔습니다.Behat/Mink는 불완전한 문자열을 통해 찾기를 수행 할 수 있습니까?

그러나 입력이 완료되지 않은 경우 ID 또는 이름이있는 입력 (필드)을 찾지 못했습니다.

내가 좋아하는 뭔가를 할 의도 :

$field = $this->getSession()->getPage()->findField("*first_name*"); 

'*'가이 문자열의 조각이 될 수 의미했다. 나는이 작업을 수행 할 수있는 방법

id="<random-string>_<actual-field-name>_<random-number>" 

어떤 생각 :

문제

내가 확실 전체 ID 원인을 알 수없는 경우가 있다는 것입니다? 무엇을 가지고

나는

- get it through label (for some reasons there are some labels that dont have 'for' attribute and sometimes the name is a sentence and not an simple name) 
- get it through css/classes (to many variables) 

을 시도 편집 : 나는 의도 된 속성의 값을 속성을 읽고 반환하는 PHP 함수를 만들었습니다

.

/** 
* 
* @param string $haystack The complete html 
* @param string $needle The string with the part of the attribute value 
* @param string $tag  The tag of where the attribute should belong 
* @param string $attr  The attribute to ifnd 
* @return string 
*/ 
protected function findCompleteAttribute($haystack, $needle, $tag = null, $attr = 'id') 

그러나, 경우에 또 다른 필드가 있다고 (예 : 숨겨진 로그인 폼)와 바늘은 처음 인 경우 그 입력에, 그들을 얻을 것이다이기도합니다.

그래서 내가 거기 내가 이름을 통해 양식을 찾을 수있는 방법을하지 않은, 그러나, 한 번 더, 양식을 지정해야합니다

$field = $this->getSession()->getPage()->find('named', array('form', $formName)); 

답변

-1

을 더 많은 Xpath를 공부하고 @ gontrollez에 대한 내 의견을 바탕으로 대답은 하나의 Xpath로 해결할 수 있습니다 :

//form[ @name = 'Register' ]//input[ contains(@id, 'username')] 

이것은 자신의 id 속성의 "이름"이 모든 입력을 URN 및 입력은 이름 속성은 두 번째 입력

+0

@ 그레트 롤 레즈 – mloureiro

2

XPath를 사용해보십시오 : 후

$el = $this->getSession()->getPage()->find('xpath', "//input[contains(@id,'first_name')]"); 
+0

에게

<form> <input id="login_username" type="text"/> </form> <form name="Register> <div> <input id="other_username" type="text"/> </div> </form> </body> 

이 반환됩니다 "등록"과 동일하다는 어떤 형태 안에이 수행하는 모든 내가 손으로했던 기능에 의해 만들어 낸 일 (나는 이전에 그것을 알고 있었으면 좋겠다). 그러나 'first_name'이 포함 된 2 개 이상의 필드가있을 때 문제가 발생하므로 자세한 정보를 찾기로 결정 했으므로 이제는 그 방법을 사용하고 있습니다. – mloureiro

+0

이상을 포함하여 XPath 표현식을 구체화 할 수 있습니다 1 속성 조건 : http://stackoverflow.com/questions/6029232/xpath-select-multiple-attr – gontrollez

+0

감사합니다. @ gontrollez,하지만 다중 속성 검색이 문제를 일으킬 것이라고 생각하지 않습니다. '양식'을 찾아 내면 내부의 입력을 검색 할 수 있습니다. 뭔가 같은 : '$ 양식 = $ this->하는 getSession() -> getPage() -> 찾기 ('XPath는', "// 형태 [conains (@ 이름, '등록']"); 를 $ input = $ form-> find ('xpath', // input (@ id, 'first_name')] ');' 하지만 지금까지 형식을 검색하는 데 성공하지 못했습니다. – mloureiro