2016-01-13 3 views
0

HTML-Селен C# пользовательских ожидаемых условий для InnerText

<span id="banner">Rolling in 10.00...</span>

мой код

public void waitroller() 
    { 

     Console.WriteLine("waiting roller"); 
     WebDriverWait wait = new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromDays(2)); 
     wait.Until<IWebElement>((d) => 
     { 
      IWebElement element = PropertiesCollection.driver.FindElement(By.Id("banner")); 
      if (element.Text == "Rolling in 20.00...") 
      { 
       return element; 
      } 

      return null; 
     }); 

    } 

ИЛИ

public void waitroller() 
    { 

     new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromMinutes(1.5)).Until(ExpectedConditions.TextToBePresentInElementLocated(By.Id("banner") , "Rolling in 20.00...")); 
    } 

Я застрял в этом внутреннем тексте, потому что внутренний текст в html всегда меняется, и я хочу сделать webdriverwait, который ждет, пока внутренний текст в баннере диапазона не будет «Rolling in 20.00». Есть ли способ сделать пользовательские ожидаемые условия, потому что я не понимаю пользовательских ожидаемых условий.

, что мне нужно что-то вроде этого

новый WebDriverWait (PropertiesCollection.driver, TimeSpan.FromMinutes (1,5)). До (ExpectedConditions.TextToBePresentInElement (PropertiesCollection.driver.FindElement (By.Id ("знамя") «Роллинг в 20.00 ...»);

, но это не работает, потому что я думаю, что Ид = «баннер» является InnerText

есть один способ, который работает, но не может работать долго, потому что я подумайте, что это неправильный способ сделать это. Я много раз зацикливаю баннер элементов и проверяю, равен ли внутренний текст «Rolling in 20.00 ...», но ha ve ошибка также

ответ

0

Я не знаю, что вы подразумеваете под «внутренним текстом», но с помощью WebDriverWait Selenium вы можете ждать все, что захотите. Вам не нужно использовать ExpectedConditions, они предназначены только для удобства программистов.

Пример:

new WebDriverWait(...).Until(driver => driver.FindElement(...).Text.Equals(...)); 

С другой стороны, ваша проблема может быть совершенно другой один. Ваш «ролик» - это обратный отсчет, когда текст меняется очень быстро? В этом случае вы, возможно, никогда не достигнете ожидаемого состояния. Я думаю, что Selenium проверяет ожидаемые условия каждые 500 миллисекунд, поэтому он даже не замечает, когда отображается «Rolling in 20.00», просто скажем 50 миллисекунд, а затем уже изменилось на «Rolling in 19.95», когда Selenium проверит в следующий раз ,

+0

он не может работать мой друг – user5783991

+0

новый WebDriverWait (PropertiesCollection.driver, TimeSpan.FromMinutes (1,5)). До (PropertiesCollection.driver => rolling.Text.Equals ("Роллинг в 20.00 ...") – user5783991

+0

синтаксическая ошибка мой друг – user5783991

0
public void waitroller() 
{ 

    Console.WriteLine("waiting roller"); 
    WebDriverWait wait = new WebDriverWait(PropertiesCollection.driver, TimeSpan.FromDays(2)); 
    IWebElement bannerElement = PropertiesCollection.driver.FindElement(By.Id("banner")); 
    wait.Until((d) =>{ return bannerElement.Text.Contains("Rolling in 20.00"); }); 

} 
+0

Надеюсь, это поможет вам. – Siva

+0

Я не понимаю тебя, мой друг, я возвращаю пустоту – user5783991

+0

Упс! я пропустил это. Я предположил, что выждатель будет возвращать элемент. Извините, в этом случае вы можете пропустить раздел «Условие» и вместо «wait.Until ((d) => {return bannerElement.Text.Contains (« Перемещение в 20.00 ");}); просто используйте wait.Until ((d) => {return bannerElement.Text.Contains ("Rolling in 20.00");}); ' попробуйте, если он работает ... – Siva

Смежные вопросы