Mink / Goutte如何在Goutte中选中没有属性的复选框?

时间:2016-05-17 13:17:59

标签: behat mink goutte

我提前道歉,但我是初学者。 我尝试检查没有ID或名称的复选框。



/**
     * getMurmur128Hash.
     * 
     * @param content
     * @return HashCode
     */
    public static HashCode getMurmur128Hash(String content) {
        final HashFunction hf = Hashing.murmur3_128();
        final HashCode hc = hf.newHasher().putString(content, Charsets.UTF_8).hash();
        return hc;
    }
    /**
     * getAbsMurmur128HashAsLongVal.
     * 
     * @param content
     * @return Long Absolute value of Long for the HashCode.
     */
    public static Long getAbsMurmur128HashAsLongVal(String content) {
        return Math.abs(getMurmur128Hash(content).asLong());
    }




我弄清楚如何用selenium2driver做到这一点。所以我使用函数" find"像这样:

<span class="ps-align-left">
<input type="checkbox" value="43899" style="background-color: rgb(252, 252, 252);"/>
                                            43899
</span>

它工作正常,但当我尝试使用无头浏览器Goutte运行测试时,我收到错误:

public function checkOption()
{
    $this->getSession()->getPage()->find('css', '.ps-align-left>input')->check();
}

谁能知道原因?我应该使用不同的功能吗?

2 个答案:

答案 0 :(得分:0)

尝试使用click并在未找到元素的情况下添加Exception。

实施例: 如果找不到该元素,则find方法将返回null,并且您将尝试单击null,这将抛出致命异常,您的套件将停止。

如果添加例外,则仅当前方案将失败,套件将继续执行。

public function iClick($selector, $locator){
    $node = $this->getSession()->getPage()->find($selector, $locator);

    if($node === null){
        throw new Exception("Element $locator not found!");
    }else{
        $node->click();
    }
}

如果元素是类型复选框并且您想要进行检查,无论是否选中,您都可以创建一个使用check()而不是click()的方法

答案 1 :(得分:0)

您必须使用MinkContext的方法checkOption($option)(在Behat / MinkExtension中,必须通过Composer安装)。

MinkContext默认安装在Behat环境中。

MinkContext.php

希望它能起作用。