首页 > 解决方案 > PHPUnit/Selenium 无法找到 *any* 元素

问题描述

我正在尝试使用 PHPUnit 和 Selenium 向我的 Symfony 4 项目添加一些简单的测试。问题是不可能找到任何 HTML 元素,这让我抓狂。

我的测试:

class WebTest extends PHPUnit_Extensions_Selenium2TestCase {

 protected function setUp() {
    $this->setBrowser('firefox');
    $this->setBrowserUrl('http://localhost:8000');
 }

 public function testPageOnline() {
    $this->url('/');
    $this->assertEquals('Home page', $this->title());
 }

 public function testHasForm() {
    $this->url('/');

    $action = $this->byCssSelector('form')->attribute('action');
    $this->assertEquals('message', $action);

    $name = $this->byName('name');
    $dob = $this->byName('dob');
    // Verify these input boxes are empty
    $this->assertEquals('', $name->value());
    $this->assertEquals('', $dob->value());
 }
}

第一个测试(“testPageOnline”)总是成功,但第二个总是失败,无论我尝试什么样的变化。我的html代码没什么特别的,没有javascript什么的,只是一个静态页面:

<form action="message" method="POST">

        <div class="row p-2">
            <div class="col-2"><label for="name">Name:</label></div>
            <div class="col-2"><input type="text" name="name"></div>
        </div>

        <div class="row p-2">
            <div class="col-2"><label for="dob">Date of birth:</label></div>
            <div class="col-2"><input type="text" name="dob"></div>
        </div>

        <div class="row p-2">
            <div class="col-2"><label for="car">Car</label></div>
            <div class="col-2">
                <select name="car">
                    <option value="volvo">Volvo</option>
                    <option value="saab">Saab</option>
                    <option value="mercedes">Mercedes</option>
                    <option value="audi">Audi</option>
                </select>
            </div>
        </div>

        <div class="row p-2">
            <div class="col-2"><label for="message">Message:</label></div>
            <div class="col-2"><input type="text" name="message" /></div>
        </div>

        <div class="row p-2">
            <div class="offset-1 col-3">
                <button type="submit" id="post" class="btn btn-block btn-dark">Post</button>
            </div>
        </div>

    </form>

PHPUnit 输出:

Sebastian Bergmann 和贡献者的 PHPUnit 7.5.14。

运行时:PHP 7.3.8-1+ubuntu18.04.1+deb.sury.org+1 配置:/home/xxxx/capsearch/phpunit.xml

测试默认 .E
2 / 2 (100%)

时间:5.72 秒,内存:4.00 MB

有 1 个错误:

1) WebTest::testHasForm InvalidArgumentException: 未找到元素。

谁能帮我找出问题所在?我尝试使用不同的选择器(类、ID、名称)找到不同的元素,并且我 100% 确定它在正确的页面上,因为第一个测试通过了。

标签: phpseleniumphpunit

解决方案


我在这个 GitHub 帖子上找到了解决方案:https ://github.com/SeleniumHQ/selenium/issues/5539

我使用的是 Selenium 3.9,显然这已损坏,我应该使用带有“ -enablePassThrough false ”标志的 3.8.1。现在它起作用了!


推荐阅读