From 4f4e9b48280be25878ea1df3104bbf78de8680c2 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Fri, 17 Sep 2021 15:27:58 +0800 Subject: [PATCH] MDL-72593 behat: Improve behat handling of file manager buttons When using a try/catch for a find if the first match is not met then we have an implicit 6 second delay waiting for the search to time out. We can avoid this by combining the searches in a comma-separated selection. I have also taken the opportunity to convert the use of ->click() to the i_click_on function which has the benefit of supporting wait for pendingJS. --- lib/behat/core_behat_file_helper.php | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/lib/behat/core_behat_file_helper.php b/lib/behat/core_behat_file_helper.php index b4064ef4bfb..17285ed2c93 100644 --- a/lib/behat/core_behat_file_helper.php +++ b/lib/behat/core_behat_file_helper.php @@ -177,20 +177,14 @@ trait core_behat_file_helper { * @return void */ protected function open_add_file_window($filemanagernode, $repositoryname) { - $exception = new ExpectationException('No files can be added to the specified filemanager', $this->getSession()); // We should deal with single-file and multiple-file filemanagers, // catching the exception thrown by behat_base::find() in case is not multiple - try { - // Looking for the add button inside the specified filemanager. - $add = $this->find('css', 'div.fp-btn-add a', $exception, $filemanagernode); - } catch (Exception $e) { - // Otherwise should be a single-file filepicker form element. - $add = $this->find('css', 'input.fp-btn-choose', $exception, $filemanagernode); - } - $this->ensure_node_is_visible($add); - $add->click(); + $this->execute('behat_general::i_click_on_in_the', [ + 'div.fp-btn-add a, input.fp-btn-choose', 'css_element', + $filemanagernode, 'NodeElement' + ]); // Wait for the default repository (if any) to load. This checks that // the relevant div exists and that it does not include the loading image. @@ -220,7 +214,7 @@ trait core_behat_file_helper { if (!$repositorylink->getParent()->getParent()->hasClass('active')) { // If the repository link is active, then the repository is already loaded. // Clicking it while it's active causes issues, so only click it when it isn't (see MDL-51014). - $repositorylink->click(); + $this->execute('behat_general::i_click_on', [$repositorylink, 'NodeElement']); } }