@ karkMump, как только вы убедились, что селен запускается нормально и конфигурация верна - попробуйте различные механизмы ожидания , например:
- явные ожидания
- неявные ожидания
- свободное ожидание (в привязках Java)
и примените его к веб-сайту на странице.
Некоторые примеры кода ожидания некоторых конкретных элементов с помощью C #:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(1));
IWebElement element = wait.Until<IWebElement>(ExpectedConditions.ElementIsVisible(By.TagName("textarea")));
В качестве альтернативы, если вам нужен больший контроль над конкретными настройками ожидания, вы можете сделать это:
DefaultWait<IWebDriver> wait = new DefaultWait(driver);
wait.Timeout = TimeSpan.FromSeconds(1);
wait.PollingInterval = TimeSpan.FromMilliseconds(100);
wait.IgnoreExceptionTypes(typeof(NoSuchElementException));
IWebElement element = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.TagName("textarea"));
});
Если вы действительно, действительно хотите поместить это в формат, в котором вы можете передать любой локатор, какой захотите, оберните его другим способом, например так:
public IWebElement WaitForElementVisible(By locator, TimeSpan timeout)
{
WebDriverWait wait = new WebDriverWait(driver, timeout);
IWebElement element = wait.Until<IWebElement>(ExpectedConditions.ElementIsVisible(locator));
}
Примечание по C #, касающееся ожидания по умолчанию в c #:
Ожидание по умолчанию - это более общее ожидание в том смысле, что оно не связано с WebDriver. Это ожидание может использоваться для передачи любого объекта ожидания. Вот пример кода (ожидающего изменения цвета определенного элемента на странице):
static void Main(string[] args)
{
IWebDriver driver = new FirefoxDriver();
driver.Navigate().GoToUrl("https://experitest.com/selenium-testing");
IWebElement element = driver.FindElement(By.Id("colorVar"));
DefaultWait<IWebElement> wait = new DefaultWait<IWebElement>(element);
wait.Timeout = TimeSpan.FromMinutes(2);
wait.PollingInterval = TimeSpan.FromMilliseconds(250);
Func<IWebElement, bool> waiter = new Func<IWebElement, bool>((IWebElement ele) =>
{
String styleAttrib = element.GetAttribute("style");
if (styleAttrib.Contains("red"))
{
return true;
}
Console.WriteLine("Color is still " + styleAttrib);
return false;
});
wait.Until(waiter);
}
Вы можете видеть, что здесь DefaultWait не привязано к WebDriver . Вы можете ждать что угодно
Надеюсь, это поможет.
С Уважением,
Евгений