3

Мне известно, что Thread.Sleep(); не является, вероятно, самым надежным способом ожидания отображения элемента, щелчка и т. д.
Threfore Я использую метод Wait.Until (Ожидаемые.Conditions), чтобы сообщить веб-сайту selenium ждать, пока элемент удовлетворит желаемый состояние.Wait.Until (Ожидаемые условия) иногда не работает Selenium C#

кажется проблема, Селен неудача иногда достаточно ожидая элемент, который будет отображаться, интерактивный и т.д ...
Даже если webDriverWait выставиться ждать, например, 15 секунд, Селен несущихся и неисправные, поэтому я не получаю никаких ошибок, мой тест прошел код мудрый, но фактический элемент был нажат слишком рано, чтобы реагировать на click.Is есть 100% надежный способ ждать, когда элемент будет доступен без ошибок?

КОД:

//This is how I instantiate WebDriverWait 
public static readonly WebDriverWait Wait = new WebDriverWait(Program.Driver, TimeSpan.FromSeconds(15)); 

//This is an example how I get and click on specific HTML element 
Wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//img[contains(@src, 'logo')]"))).Click(); 

Любое suggesstion, предположение было бы оценено!

+0

Добавить контрольную точку до щелчка, запустите скрипт, дождитесь элементом/страницы на быть полностью загружен ... теперь работает клик? Если нет, вы можете щелкнуть не тот элемент. – JeffC

+0

Это одно из первых, что я сделал до публикации этого вопроса. Everyhting работает в порядке, он просто сейчас достаточно. –

+1

Как выглядит элемент HTML? Есть ли какой-нибудь скрипт, который запускается после загрузки страницы, который каким-то образом его модифицирует? Возможно, код на самом деле щелкнул элемент, но этот элемент не тот, который отвечает на клик, или, может быть, он доступен для клика, но какой-то скрипт не запускается, что модифицирует его атрибут onclick или что-то в этом роде ... Я в основном хватаюсь за соломинку, не видя страница. Ваш код выглядит хорошо, чтобы делать то, что вы просите. Селен идентифицирует элемент как интерактивный, но щелчок в этот момент явно не обеспечивает ожидаемого ответа. – JeffC

ответ

0

Вы можете использовать эту функцию, то не ждать и найти элемент .... это работает для меня всегда

public static void scrollToElement(final WebDriver webDriver, final Point location) 
{ 
    System.out.println("Scrolling to :" +location.x +"," +location.y); 
    final String sScript = "javascript:window.scrollBy("+location.x+","+location.y+")"; 
    final JavascriptExecutor js = (JavascriptExecutor) webDriver; 
    js.executeScript(sScript); 
} 
Смежные вопросы