Add automatic handling of NoSuchElement exceptions
NoSuchElement exceptions are sometimes thrown instead of StaleElementReference exceptions. This can happen when the Selenium2 driver for Mink performs an action on an element through the WebDriver session instead of directly through the WebDriver element. In that case, if the element with the given ID does not exist, a NoSuchElement exception would be thrown instead of a StaleElementReference exception, so those cases are handled like StaleElementReference exceptions. Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
f0cbeecf21
commit
fc6c290a4f
|
@ -38,6 +38,14 @@
|
||||||
* the element is stale it is found again using the same parameters to find it
|
* the element is stale it is found again using the same parameters to find it
|
||||||
* in the first place.
|
* in the first place.
|
||||||
*
|
*
|
||||||
|
* NoSuchElement exceptions are sometimes thrown instead of
|
||||||
|
* StaleElementReference exceptions. This can happen when the Selenium2 driver
|
||||||
|
* for Mink performs an action on an element through the WebDriver session
|
||||||
|
* instead of directly through the WebDriver element. In that case, if the
|
||||||
|
* element with the given ID does not exist, a NoSuchElement exception would be
|
||||||
|
* thrown instead of a StaleElementReference exception, so those cases are
|
||||||
|
* handled like StaleElementReference exceptions.
|
||||||
|
*
|
||||||
* ElementNotVisible exceptions are thrown when the command requires the element
|
* ElementNotVisible exceptions are thrown when the command requires the element
|
||||||
* to be visible but the element is not. Finding an element only guarantees that
|
* to be visible but the element is not. Finding an element only guarantees that
|
||||||
* (at that time) the element is attached to the DOM, but it does not provide
|
* (at that time) the element is attached to the DOM, but it does not provide
|
||||||
|
@ -200,8 +208,8 @@ class ElementWrapper {
|
||||||
/**
|
/**
|
||||||
* Executes the given command.
|
* Executes the given command.
|
||||||
*
|
*
|
||||||
* If a StaleElementReference exception is thrown the wrapped element is
|
* If a StaleElementReference or a NoSuchElement exception is thrown the
|
||||||
* found again and, then, the command is executed again.
|
* wrapped element is found again and, then, the command is executed again.
|
||||||
*
|
*
|
||||||
* @param \Closure $commandCallback the command to execute.
|
* @param \Closure $commandCallback the command to execute.
|
||||||
* @param string $errorMessage an error message that describes the failed
|
* @param string $errorMessage an error message that describes the failed
|
||||||
|
@ -216,6 +224,8 @@ class ElementWrapper {
|
||||||
return $commandCallback();
|
return $commandCallback();
|
||||||
} catch (\WebDriver\Exception\StaleElementReference $exception) {
|
} catch (\WebDriver\Exception\StaleElementReference $exception) {
|
||||||
$this->printFailedCommandMessage($exception, $errorMessage);
|
$this->printFailedCommandMessage($exception, $errorMessage);
|
||||||
|
} catch (\WebDriver\Exception\NoSuchElement $exception) {
|
||||||
|
$this->printFailedCommandMessage($exception, $errorMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->element = $this->elementFinder->find();
|
$this->element = $this->elementFinder->find();
|
||||||
|
@ -226,10 +236,10 @@ class ElementWrapper {
|
||||||
/**
|
/**
|
||||||
* Executes the given command on a visible element.
|
* Executes the given command on a visible element.
|
||||||
*
|
*
|
||||||
* If a StaleElementReference exception is thrown the wrapped element is
|
* If a StaleElementReference or a NoSuchElement exception is thrown the
|
||||||
* found again and, then, the command is executed again. If an
|
* wrapped element is found again and, then, the command is executed again.
|
||||||
* ElementNotVisible or a MoveTargetOutOfBounds exception is thrown it is
|
* If an ElementNotVisible or a MoveTargetOutOfBounds exception is thrown it
|
||||||
* waited for the wrapped element to be visible and, then, the command is
|
* is waited for the wrapped element to be visible and, then, the command is
|
||||||
* executed again.
|
* executed again.
|
||||||
*
|
*
|
||||||
* @param \Closure $commandCallback the command to execute.
|
* @param \Closure $commandCallback the command to execute.
|
||||||
|
|
Loading…
Reference in New Issue