Я реорганизовал свое решение на основе ссылки на Selenium WebDriver 2.15.0 в моем проекте и с использованием Selenium WebDriver Server 2.16.0, и я сделал следующие наблюдения:
- Событие щелчка правильно запускает при использовании
FirefoxDriver
- Событие щелчка не срабатывает правильно для определенных элементов управления при использовании
RemoteWebDriver
для DesiredCapabilities.Firefox
- Событие щелчка правильно запускает при использовании
RemoteWebDriver
для DesiredCapabilities.HtmlUnit
и DesiredCapabilities.HtmlUnitWithJavaScript
-
InternetExplorerDriver
и RemoteWebDriver
с DesiredCapabilities.InternetExplorer
(на самом деле одно и то же) все еще дают мне противоречивые результаты, которые я считаю трудными прибить.
Моим решением первых трех пунктов было создание моих собственных классов, расширяющих RemoteWebDriver
и RemoteWebElement
, чтобы я мог скрыть свое пользовательское поведение от тестового кода, который продолжает ссылаться на IRemoteWebDriver
и IWebElement
.
У меня ниже моих текущих «настроек», но если вы пойдете с этими пользовательскими классами, вы сможете настроить свой драйвер и поведение веб-элемента в соответствии с вашими пожеланиями, не меняя тестовый код.
public class MyRemoteWebDriver : RemoteWebDriver
{
//Constructors...
protected override RemoteWebElement CreateElement(string elementId)
{
return new MyWebElement(this, elementId);
}
}
public class MyWebElement : RemoteWebElement, IWebElement
{
//Constructor...
void IWebElement.Click()
{
if (Settings.Default.WebDriver.StartsWith("HtmlUnit"))
{
Click();
return;
}
if (TagName == "a")
{
SendKeys("\n");
Thread.Sleep(100);
return;
}
if (TagName == "input")
{
switch (GetAttribute("type"))
{
case "submit":
case "image":
Submit();
return;
case "checkbox":
case "radio":
//Send the 'spacebar' keystroke
SendKeys(" ");
return;
}
}
//If no special conditions are detected, just run the normal click
Click();
}
}