我如何处理与 Behat 和 Goutte 的模态对话?
How can I handle modal dialogs with Behat and Goutte?
我正在网站上测试允许用户填写表格的功能。此刻,用户需要单击一个按钮,这会触发一个 Ajax 加载模式,允许他上传文件。但是,当我触发按钮时,Behat 似乎没有 "see" 模态 window.
也许我应该准确地说我在 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");
}
}
然而到目前为止我没有运气。
我该怎么办?
您有一个 iframe
,您需要切换到它。
使用这样的东西:
$this->getSession()->getDriver()->switchToIFrame('iframe_name');
我认为您还应该考虑在高层基础上编写您的场景,并使用页面对象扩展来避免获得难以维护和不可读的冗长场景,并尽可能多地重用代码。
Follow Behavior Driven Development methodology.
我正在网站上测试允许用户填写表格的功能。此刻,用户需要单击一个按钮,这会触发一个 Ajax 加载模式,允许他上传文件。但是,当我触发按钮时,Behat 似乎没有 "see" 模态 window.
也许我应该准确地说我在 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");
}
}
然而到目前为止我没有运气。
我该怎么办?
您有一个 iframe
,您需要切换到它。
使用这样的东西:
$this->getSession()->getDriver()->switchToIFrame('iframe_name');
我认为您还应该考虑在高层基础上编写您的场景,并使用页面对象扩展来避免获得难以维护和不可读的冗长场景,并尽可能多地重用代码。
Follow Behavior Driven Development methodology.