Skip to content

Commit 46442ac

Browse files
committed
Adding support for intercepted element clicks in .NET
This adds a new exception, `ElementClickInterceptedException` to indicate when an element is obscured by another element. This allows users to distinguish between different causes of elements not being clickable.
1 parent cddff58 commit 46442ac

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// <copyright file="ElementClickInterceptedException.cs" company="WebDriver Committers">
2+
// Licensed to the Software Freedom Conservancy (SFC) under one
3+
// or more contributor license agreements. See the NOTICE file
4+
// distributed with this work for additional information
5+
// regarding copyright ownership. The SFC licenses this file
6+
// to you under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
// </copyright>
18+
19+
using System;
20+
using System.Runtime.Serialization;
21+
22+
namespace OpenQA.Selenium
23+
{
24+
/// <summary>
25+
/// The exception that is thrown when an element is not visible.
26+
/// </summary>
27+
[Serializable]
28+
public class ElementClickInterceptedException : ElementNotInteractableException
29+
{
30+
/// <summary>
31+
/// Initializes a new instance of the <see cref="ElementNotInteractableException"/> class.
32+
/// </summary>
33+
public ElementClickInterceptedException()
34+
: base()
35+
{
36+
}
37+
38+
/// <summary>
39+
/// Initializes a new instance of the <see cref="ElementNotInteractableException"/> class with
40+
/// a specified error message.
41+
/// </summary>
42+
/// <param name="message">The message that describes the error.</param>
43+
public ElementClickInterceptedException(string message)
44+
: base(message)
45+
{
46+
}
47+
48+
/// <summary>
49+
/// Initializes a new instance of the <see cref="ElementNotInteractableException"/> class with
50+
/// a specified error message and a reference to the inner exception that is the
51+
/// cause of this exception.
52+
/// </summary>
53+
/// <param name="message">The error message that explains the reason for the exception.</param>
54+
/// <param name="innerException">The exception that is the cause of the current exception,
55+
/// or <see langword="null"/> if no inner exception is specified.</param>
56+
public ElementClickInterceptedException(string message, Exception innerException)
57+
: base(message, innerException)
58+
{
59+
}
60+
61+
/// <summary>
62+
/// Initializes a new instance of the <see cref="ElementNotInteractableException"/> class with serialized data.
63+
/// </summary>
64+
/// <param name="info">The <see cref="SerializationInfo"/> that holds the serialized
65+
/// object data about the exception being thrown.</param>
66+
/// <param name="context">The <see cref="StreamingContext"/> that contains contextual
67+
/// information about the source or destination.</param>
68+
protected ElementClickInterceptedException(SerializationInfo info, StreamingContext context)
69+
: base(info, context)
70+
{
71+
}
72+
}
73+
}

dotnet/src/webdriver/Remote/RemoteWebDriver.cs

+3
Original file line numberDiff line numberDiff line change
@@ -1380,6 +1380,9 @@ private static void UnpackAndThrowOnError(Response errorResponse)
13801380
case WebDriverResult.ObsoleteElement:
13811381
throw new StaleElementReferenceException(errorMessage);
13821382

1383+
case WebDriverResult.ElementClickIntercepted:
1384+
throw new ElementClickInterceptedException(errorMessage);
1385+
13831386
case WebDriverResult.ElementNotInteractable:
13841387
throw new ElementNotInteractableException(errorMessage);
13851388

dotnet/src/webdriver/Remote/WebDriverError.cs

+1
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ public static WebDriverResult ResultFromError(string error)
203203
private static void InitializeResultMap()
204204
{
205205
resultMap = new Dictionary<string, WebDriverResult>();
206+
resultMap[ElementClickIntercepted] = WebDriverResult.ElementClickIntercepted;
206207
resultMap[ElementNotSelectable] = WebDriverResult.ElementNotSelectable;
207208
resultMap[ElementNotVisible] = WebDriverResult.ElementNotDisplayed;
208209
resultMap[ElementNotInteractable] = WebDriverResult.ElementNotInteractable;

0 commit comments

Comments
 (0)