Здравствуйте, если посмотрите в исходники Selenium.WebDriver, то там видно, что перед каждым Click() происходит MouseMove на элемент, по которому будет выполняться щелчок. Таким образом, если при смене фокуса кнопка пропадает, то она пропадает и кликнуть по ней нельзя - это нормально (браузер ведёт себя правильно, а тестируемое приложение должно стать более пригодно к тестированию). По этой причине неуверен, что даже руками (не автотестом) удостаться повторить клик по кнопке, которая доступна только когда курсор наведён на другую кнопку.
Но всё же, программно кликнуть по кнопке, не наводя на неё указатель мыши, можно. Если используете dotnet, то смотрите исходный код файла, где выполняется Click():
https://code.google..../ClickAction.cs
/// <summary>
/// Defines an action for clicking on an element.
/// </summary>
internal class ClickAction : MouseAction, IAction
{
/// <summary>
/// Initializes a new instance of the <see cref="ClickAction"/> class.
/// </summary>
/// <param name="mouse">The <see cref="IMouse"/> with which the action will be performed.</param>
/// <param name="actionTarget">An <see cref="ILocatable"/> describing an element at which to perform the action.</param>
public ClickAction(IMouse mouse, ILocatable actionTarget)
: base(mouse, actionTarget)
{
}
#region IAction Members
/// <summary>
/// Performs this action.
/// </summary>
public void Perform()
{
this.MoveToLocation();
this.Mouse.Click(this.ActionLocation);
}
#endregion
}
Тут видно, что перед щелчком на элемент наводистя указатель мыши.
Значит, если хотите сделать второй клик чистым кликом без наведения курсора мыши на место клика (так-то, считаю это нетестовым случаем), то выполняете не
IWebElement.Click()
, где IWebElement - ваш элемент
а выполняйте
RemoteWebDriver.Mouse.Click(IWebElement)
, где RemoteWebDriver - браузер, а IWebElement - элемент по которому нужно кликнуть.
Также, возможно вам поможет использование нативных событий. *NativeEvents = true - параметр различных браузеров. Возможно, нативные события дадут нужную задержку и корректное поведение. Говорю вот о чём:
var firefoxProfile = new FirefoxProfile();
...
//Включение режима генерации JavaScript событий (а не имитации их вызова)
firefoxProfile.EnableNativeEvents = true;
//Создание драйвера с настройками из профиля
var browser = new FirefoxDriver(firefoxProfile);