php - 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% 确定它在正确的页面上,因为第一个测试通过了。
解决方案
我在这个 GitHub 帖子上找到了解决方案:https ://github.com/SeleniumHQ/selenium/issues/5539
我使用的是 Selenium 3.9,显然这已损坏,我应该使用带有“ -enablePassThrough false ”标志的 3.8.1。现在它起作用了!
推荐阅读
- java - 在 Java 中分配 List 是线程安全的吗?
- sql-server - 无法使用 Tableau Online 连接到 Microsoft SQL Server
- sublimetext3 - Sublime 每 5000 行添加文本
- rust - 需要两次使用模块名称来引用模块中的结构
- swift - 将 UInt32 转换为通用 T:数字
- sql-server - SQL 查询以获取具有最大日期的商家名称
- sql - 如何根据一个月内的日期对查询结果进行分组
- react-native - 有人如何停止 NativeBase 的 Tab 组件的水平滚动
- vue.js - 绘制日历事件
- java - HQL Like 不返回任何内容