Behat / Mink是否可以通过不完整的字符串进行查找?

时间:2013-09-26 14:28:14

标签: bdd behat mink

我一直在通过Behat | Mink工作BDD。

但是,如果输入(字段)不完整,我就无法找到带有ID或名称的输入(字段)。

我打算做以下事情:

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

其中'*'表示可以是那里的任何字符串。

问题是我有一个案例,我无法确切知道完整的ID原因:

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

知道我该怎么办?

我尝试过什么

- 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 ) );

2 个答案:

答案 0 :(得分:2)

尝试使用XPath:

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

答案 1 :(得分:-1)

在研究了更多Xpath之后,基于我对@gontrollez的评论,它可以通过一个Xpath解决:

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

这将返回在其id属性上具有“username”的所有输入,并且输入位于其name属性等于“Register”的任何形式内

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

这将只返回第二个输入