我正在网站上测试功能,允许用户填写表单。在某个时刻,用户需要单击一个按钮,该按钮会触发一个Ajax加载的模式,允许他上传文件。但是,当我触发按钮时,Behat似乎没有“看到”模态窗口。
也许我应该准确地说我在Drupal 8环境中,但我不知道这是否改变了什么
我们很清楚,我不是在谈论警报,而是kind of modal
到目前为止,我的测试看起来像这样:
Scenario: Creates a stage test with two sessions
Given I am on "/user/login"
And I fill in "user@user.com" for "name"
And I fill in "password" for "pass"
And I press "Log in"
Then I should get a "200" HTTP response
And I should see "User Name"
When I go to "/node/add/stage"
Then I should get a "200" HTTP response
And I should see "Add content CISIA Stage"
When I fill in "Test Cisia Stage" for "edit-title-0-value"
And I press "Select files"
Then I should see "Upload files" <-- fails
And I should see "Click or drop files here to upload them" <-- gets ignored but is likely to fail too
我无法在SO或Google上找到与模式相关的任何内容,只关于小消息提醒,人们谈论我没有的对象或功能(例如getWebDriver()
)
我也试图通过这样做来找到模态的内容:
public function iShouldSeeAModalWindow() {
$element = $this->getSession()->getPage();
$modal = $element->find('css', sprintf('div:contains("%s")', 'Upload files'));
if($modal) {
exit('Yaaaay!');
}
else {
throw new Exception("No modal found");
}
}
但到目前为止我没有运气。
我该怎么办?
答案 0 :(得分:1)
你有一个iframe
,你需要切换到它。
使用类似的东西:
$this->getSession()->getDriver()->switchToIFrame('iframe_name');
我认为您还应该考虑在高级别上编写场景,并使用页面对象扩展来避免长时间难以维护和不可读的场景,并尽可能多地重用代码。
遵循行为驱动开发方法。