2017-02-16 21 views
0

Я работаю с Selenium Standalone Server 3.0.1. Я пытаюсь добавить Explicit Wait в свой код, чтобы обнаружить элемент через xpath, когда элемент становится видимым. Чтобы получить некоторую помощь Java, я искал исходный код для Selenium Standalone Server 3.0.1, но не смог его найти. Я нашел исходный код в выпуске selenium-java-2.53.1. Я загрузил его и нашел selenium-java-2.53.1-srcs и добавил к моему Eclipse IDE. С помощью FluentWait я просто скопировал код в моем Eclipse IDE и изменил имена переменных.Selenium Webdriver 3.0.1- [Eclipse-Java-Chrome]: Ошибка отображения селена для FluentWait Class

Пример кода в документации, как:

// Waiting 30 seconds for an element to be present on the page, checking 
    // for its presence once every 5 seconds. 
    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
     .withTimeout(30, SECONDS) 
     .pollingEvery(5, SECONDS) 
     .ignoring(NoSuchElementException.class); 

    WebElement foo = wait.until(new Function<WebDriver, WebElement>() { 
    public WebElement apply(WebDriver driver) { 
     return driver.findElement(By.id("foo")); 
     } 
    }); 

Но когда я реализую этот код, просто скопировать вставив:

 Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
      .withTimeout(30, TimeUnit.SECONDS) 
      .pollingEvery(5, TimeUnit.SECONDS) 
      .ignoring(NoSuchElementException.class); 

     WebElement element = wait.until(new Function<WebDriver, WebElement>()  { 
     public WebElement apply(WebDriver driver) { 
      return driver.findElement(By.xpath("//p[text()='WebDriver']")); 
     } 
     }); 

Я получаю сообщение об ошибке на FluentWait класса, как The type FluentWait is not generic; it cannot be parameterized with arguments <WebDriver>

Вот список импорта:

import java.util.concurrent.TimeUnit; 
    import org.apache.log4j.Logger; 
    import org.apache.log4j.PropertyConfigurator; 
    import org.openqa.selenium.By; 
    import org.openqa.selenium.NoSuchElementException; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.WebElement; 
    import org.openqa.selenium.chrome.ChromeDriver; 
    import org.openqa.selenium.support.ui.Wait; 
    import com.google.common.base.Function; 

Может ли кто-нибудь помочь мне, пожалуйста?

@blalasaadri @Mira любые предложения с вашего конца?

+1

Пробовали ли вы пример из документации? https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/FluentWait.html – JeffC

+0

@JeffC Спасибо. Я вижу некоторую разницу между документацией, предоставленной кодом selenium-java-2.53.1 src, и документацией, предоставленной в указанном вами URL-адресе. В то время как в selenium-java-2.53.1 код src создание объекта равно << - Wait wait = new FluentWait (driver) - >> но документация по ссылке говорит, что это << - Подождите wait = new FluentWait (водитель) - >> – DebanjanB

ответ

1

Необходимо указать ожидаемое условие в ожидании ниже - это модифицированный код, который может решить вашу проблему.

Код: Мой код

import java.util.concurrent.TimeUnit; 

import org.junit.Test; 

import org.openqa.selenium.By; 

import org.openqa.selenium.NoSuchElementException; 

import org.openqa.selenium.WebDriver; 

import org.openqa.selenium.WebElement; 

import org.openqa.selenium.support.ui.ExpectedConditions; 

import org.openqa.selenium.support.ui.FluentWait; 

import org.openqa.selenium.support.ui.Wait; 

public class DummyClass 

{ 

    WebDriver driver; 
    @Test 
    public void test() 
{ 

      Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
        .withTimeout(30, TimeUnit.SECONDS) 
        .pollingEvery(5, TimeUnit.SECONDS) 
        .ignoring(NoSuchElementException.class); 

       until(new Function<WebElement , Boolean>() 
       { 
      public Boolean apply(WebElement element) 
      { 
       return element.getText().endsWith("04"); 
      //WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("Sample Post2"))); 
      } 

private void until(Function<WebElement, Boolean> function) { 
    driver.findElement(By.linkText("Sample Post2")); 

} 
+0

Спасибо за предложение. Я могу видеть из вашего кода, который вы использовали ExpectedConditions, но я предполагаю, что мы делаем это при реализации Explicit Wait. Но был ли опрос webdriver для элемента каждые 5 секунд в вашем случае? На данный момент я не уверен, как опрос проводится в Fluent Wait, но я должен это реализовать. Любые другие предложения для меня? – DebanjanB

+0

Я забыл упомянуть, что Eclipse IDE показывает ошибку при создании объекта «wait» для класса «Wait» << - Wait wait = new FluentWait (driver) - >> – DebanjanB

+0

Я отредактировал код или проверьте ниже код, если он может помочь? FluentWait ожидание = новый FluentWait (драйвер) \t .withTimeout (100, TimeUnit.SECONDS) \t .pollingEvery (50, TimeUnit.MILLISECONDS); \t \t \t \t // запуск в ожидании данного элемента \t \t ожидания.до (новое ElementWaitCondition (браузер, запрос)); – Dharam