【问题标题】:How to click on a button in PHPUnit (Symfony2)如何单击 PHPUnit (Symfony2) 中的按钮
【发布时间】:2023-03-26 13:40:02
【问题描述】:

,我正在编写功能测试,我想知道如何简单地点击按钮,我有一个隐藏的表单,在点击按钮后显示

我尝试像这样进行正常点击:

$button  = $crawler->filter('button:contains("Add")');
$crawler = $client->click($button);

但似乎 click() 函数采用 Link 对象而不是 Crawler 对象。

我该怎么做?

【问题讨论】:

    标签: symfony button click phpunit functional-testing


    【解决方案1】:

    我假设你使用 JS 来显示你的隐藏表单。 这将不起作用,因为爬虫不支持 JS,如果您想测试表单的点击和可见性,您最好查找 CasperJs 或其他爬虫。

    Symfony2 Functional Testing - Click on elements with jQuery interaction

    否则如果测试表单的提交是你想要实现的,那么你可以使用:

    $form = $crawler->filter('button#idofyourbutton')->form(array(
                'firstname' => 'Blabla',
                'lastname' => 'Blabla',
                'address' => 'BlablaBlablaBlablaBlabla',
                'zipcode' => '302404',
                'phone' => '30030130269'
            ),'POST');
    
            $client->submit($form);
    

    【讨论】:

    • 是的,这就是我要测试的内容,感谢您的回复。但我不断得到:当我尝试选择提交输入时,当前节点列表为空
    • var_dump $crawler->html() 在您发出请求后查看页面是否正确。那么如果表单有一个带有 id 的按钮标签,选择器 'button#yourbuttonid' 应该可以工作(按钮应该在表单内)
    • 是的,这不是我想要的页面,我想我现在明白了当我尝试访问我的路线时我被重定向到登录表单的问题。非常感谢您的帮助,我将尝试从登录表单到结束的完整场景。
    • 只是最后一个问题,当我像您建议的那样对 html 进行 var_dum 时,我正在 Windows 控制台中工作,它只显示 html 页面中的几行然后它显示......,在某些页面中我有相同的结构,所以我不知道我是否真的被重定向了。我的问题是有什么方法可以强制 var_dump 显示整个 html 页面?
    • 嗯,您可以尝试 var_export($crawler->html(), true) 或 print_r($crawler->html(), true) ,从未测试过,所以我不知道为什么它没有t 返回整个 html,但试试这个可能会有所帮助。
    【解决方案2】:

    从它说要转换为链接对象的文档中,您可以执行以下操作

    $button = $crawler
        ->filter('button:contains("Add")') // find all buttons with the text "Add"
        ->eq(0) // select the first button in the list
        ->link() // and click it
    ;
    

    然后你可以像以前一样点击它..

    $crawler = $client->click($button);
    

    虽然我没有使用过这个,所以我不确定它是否可以与按钮一起使用。

    【讨论】:

    • 感谢@Qoop 的回复,我刚刚测试了您的代码,但我认为它不起作用我收到以下错误:LogicException: Unable to click on a "button" tag. 似乎我可以在不单击添加按钮的情况下访问隐藏表单,所以我不知道不测试该按钮的功能或跳过它是否是个好主意
    • 它是提交表单的一部分还是只是一个随机按钮?如果它是一个表单,那么最好选择按钮,然后选择它所属的表单并提交它。或者,将按钮更改为您可以收听的锚点可能是有意义的,或者如果您禁用/不可用 javascript,则使用 $_GET 重新加载页面。
    • 没有表单实际上是隐藏的,所以它不是表单的一部分,它是一个显示表单的按钮,然后具有表单的实际提交按钮
    • 如果用户禁用或关闭了 javascript,您的系统是否仍然能够重新加载页面并显示表单?
    猜你喜欢
    • 2014-11-16
    • 1970-01-01
    • 2014-02-16
    • 2017-11-12
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多