你如何通过phpunit控制Selenium中的InvalidArgumentException?

时间:2018-01-29 09:12:16

标签: php phpunit

我正在尝试使用PHPUnit_Extensions_Selenium2TestCase编写一些e2e测试,但它不断抛出以下异常:

InvalidArgumentException: Element not found.

显然,我检查了页面signup_page.php,并且所有HTML元素都在那里,并且正在发送的表单的行为也有效(它在提交时会打印出“成功”消息)。它显然找不到页面上的任何元素,但对于我的生活,我无法弄清楚为什么。

以下是测试代码:

$this->url("signup_page.php");
$this->byName("username")->value(self::USERNAME);
$this->byName("email")->value(self::EMAIL);
$this->byName("password")->value(self::PASSWORD);
$this->byTag("form")->submit();
$this->assertRegExp("/success/", $this->byTag("body")->text());

我可以看到浏览器被定向到页面,但随后抛出异常,它会突然死亡。

以下是php页面以防万一:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
   <head>
      <title></title>
      <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.3.0/pure-min.css">
      <link rel="stylesheet" href="css/base.css">
   </head>
   <body>

      <form action="signup.php" method="get" class="pure-form pure-form-stacked">

         <fieldset>

            <legend>Signup</legend>

            <label for="username">username</label>
            <input type="text" name="username" id="username" />

            <label for="email">email</label>
            <input type="text" name="email" id="email" />

            <label for="password">password</label>
            <input type="password" name="password" id="password" />

            <input type="submit" name="submit" value="signup" class="pure-button pure-button-primary" />

         </fieldset>

      </form>

   </body>
</html>

2 个答案:

答案 0 :(得分:1)

phpunit-selenium与selenium 3 + geckodriver + firefox不完全兼容。

请参见https://github.com/giorgiosironi/phpunit-selenium/issues/427,了解有关代码更改的信息,以提高兼容性(并解决特定的“ InvalidArgumentException:找不到元素”问题)

答案 1 :(得分:-1)

我遇到了同样的问题。我用chrome替换了驱动程序而不是FF

...
protected function setUp()
{
    $this->setBrowser('chrome');
    $this->setBrowserUrl($this->host);
}
...