Иногда, когда я вызываю Selenium FindElements(By), он выдает исключение, и мой драйвер перестает работать. Параметр "BY" может быть проблемой: когда я использую другой by для поиска одних и тех же элементов, он работает.
Также я мог видеть, что даже если мой элемент существует или если этот же метод с тем же аргументом был вызван ранее, это не мешает методу генерировать исключение.
Мой метод:
public IWebElement SafeFindElement(By by)
{
try
{
IWebElement element;
if (_driver.FindElements(by).Any())
{
element = _driver.FindElements(by).First();
return element;
}
return null;
}
catch (NoSuchElementException)
{
return null;
}
catch (Exception)
{
return null;
}
}
Пример значения BY, которое не работает постоянно (даже если оно существует на странице):
By.CssSelector("input[data-id-selenium='entrar']")
Исключение:
WebDriverException
HTTP-запрос к удаленному серверу WebDriver для URL-адреса http://localhost:46432/session/ef6cd2f1bf3ed5c924fe29d0f2c677cf/elements истекло через 60 секунд.
Я понятия не имею, что это может быть или что вызывает эту нестабильность. Есть кто-нибудь с любым предложением?
@РЕДАКТИРОВАТЬ
Я нашел временное решение.
Раньше я пытался найти элемент, используя:
var element = browser
.FindElements(By.CssSelector("input[data-id-selenium='entrar']")
.FirstOrDefault();
Or
var element = browser
.FindElements(By.XPath("//input[@data-id-selenium='entrar']");
.FirstOrDefault();
Теперь я использую:
var element = browser
.FindElements(By.TagName("input"))
.FirstOrDefault(x => x.GetAttribute("data-id-selenium") == "entrar");
Они делают то же самое, но первые выдают исключение без причины. Кроме того, это временное решение, и я пытаюсь решить проблему поиска элемента только с помощью селекторов.
ElementNotFoundException
- person BlackHatSamurai   schedule 15.07.2015