Skip to content

Commit 6f998ba

Browse files
mialeskapaveliam
authored andcommitted
fix #120 (possible StaleElementReference exception in FindElements due to second filteration) (#121)
1 parent 762958c commit 6f998ba

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

Aquality.Selenium/src/Aquality.Selenium/Elements/ElementFinder.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,31 +65,31 @@ public ReadOnlyCollection<IWebElement> FindElements(By locator, Func<IWebElement
6565
}
6666

6767
internal ReadOnlyCollection<IWebElement> FindElements(By locator, DesiredState desiredState, TimeSpan? timeout = null)
68-
{
68+
{
69+
var foundElements = new List<IWebElement>();
6970
var resultElements = new List<IWebElement>();
7071
try
7172
{
7273
ConditionalWait.WaitFor(driver =>
7374
{
74-
var elements = driver.FindElements(locator);
75-
resultElements.Clear();
76-
resultElements.AddRange(elements);
77-
return elements.Any(desiredState.ElementStateCondition);
75+
foundElements = driver.FindElements(locator).ToList();
76+
resultElements = foundElements.Where(desiredState.ElementStateCondition).ToList();
77+
return resultElements.Any();
7878
}, timeout);
7979
}
8080
catch (WebDriverTimeoutException ex)
8181
{
82-
HandleTimeoutException(ex, desiredState, locator, resultElements);
82+
HandleTimeoutException(ex, desiredState, locator, foundElements);
8383
}
84-
return resultElements.Where(desiredState.ElementStateCondition).ToList().AsReadOnly();
84+
return resultElements.AsReadOnly();
8585
}
8686

87-
private void HandleTimeoutException(WebDriverTimeoutException ex, DesiredState desiredState, By locator, List<IWebElement> resultElements)
87+
private void HandleTimeoutException(WebDriverTimeoutException ex, DesiredState desiredState, By locator, List<IWebElement> foundElements)
8888
{
8989
var message = LocalizationManager.Instance.GetLocalizedMessage("loc.no.elements.found.in.state", locator.ToString(), desiredState.StateName);
9090
if (desiredState.IsCatchingTimeoutException)
9191
{
92-
if (!resultElements.Any())
92+
if (!foundElements.Any())
9393
{
9494
if (desiredState.IsThrowingNoSuchElementException)
9595
{
@@ -105,7 +105,7 @@ private void HandleTimeoutException(WebDriverTimeoutException ex, DesiredState d
105105
else
106106
{
107107
var combinedMessage = $"{ex.Message}: {message}";
108-
if (desiredState.IsThrowingNoSuchElementException && !resultElements.Any())
108+
if (desiredState.IsThrowingNoSuchElementException && !foundElements.Any())
109109
{
110110
throw new NoSuchElementException(combinedMessage);
111111
}

Aquality.Selenium/tests/Aquality.Selenium.Tests/Integration/TestApp/TheInternet/Forms/TheInternetForm.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ protected TheInternetForm(By locator, string name) : base(locator, name)
1919
public void Open()
2020
{
2121
BrowserManager.Browser.GoTo(Url);
22+
BrowserManager.Browser.WaitForPageToLoad();
2223
}
2324
}
2425
}

0 commit comments

Comments
 (0)