2017-02-01 11 views
-1

Когда я использовал указанный метод, чтобы увидеть, является ли элемент видимым на странице, я получаю исключение, указывающее, что его не может найти элемент, используя указанный локатор.Selenium method visibilityOf - Кажется, что не работает?

Любые идеи, кто-нибудь сталкивался с этой проблемой раньше или даже имеет лучший метод?

public boolean isElementPresentByWebElement(WebElement element) { 
    Wait<WebDriver> fluentWait = new FluentWait<WebDriver>(driver).withTimeout(15, TimeUnit.SECONDS) 
      .pollingEvery(1, TimeUnit.SECONDS).ignoring(NoSuchElementException.class); 

    for (int i = 0; i < 2; i++) { 
     try { 
      fluentWait.until(ExpectedConditions.visibilityOf(element)); 
      System.out.println("Element is visible: " + element.toString()); 
      return true; 
     } catch (Exception e) { 
      System.out.println(
        "Unable to locate the element: " + element.toString() + ", Exception: " + e.toString()); 
      throw (e); 
     } 
    } 
    return false; 
} 

enter image description here

+0

@anderson пожалуйста найти HTML код attatched – Gbru

+0

@Andersson пожалуйста найти HTML код attatched – Gbru

+0

вы можете, дайте мне знать, какие исключения вы импортировали. это должно быть org.openqa.selenium.NoSuchElementException; –

ответ

1

Я думаю, что ваш код слишком сложным для того, что вы пытаетесь сделать. Существует встроенный класс, ExpectedConditions, который будет делать то, что вы хотите. Вы также зацикливаете на ожидание, которое не нужно. Я предлагаю вам передать локатор (By) вместо WebElement. Он расширит вашу способность использовать эту функцию, потому что вам не нужно будет найти элемент перед использованием функции.

public boolean isElementPresentByLocator(By locator) 
{ 
    try 
    { 
     new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOfElementLocated(locator)); 
     System.out.println("Element is visible: " + locator.toString()); 
     return true; 
    } 
    catch (TimeoutException e) 
    { 
     System.out.println("Unable to locate the element: " + locator.toString() + ", Exception: " + e.toString()); 
     return false; 
    } 
} 

Код, указанный ниже, является скорее для прямого перевода и упрощения вашего кода.

public boolean isElementPresentByWebElement(WebElement element) 
{ 
    try 
    { 
     new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOf(element)); 
     System.out.println("Element is visible: " + element.toString()); 
     return true; 
    } 
    catch (TimeoutException e) 
    { 
     System.out.println("Unable to locate the element: " + element.toString() + ", Exception: " + e.toString()); 
     return false; 
    } 
} 
-1

Обновлено:

попробуйте следующее:

int waitCounter = 0; 

public static void WaitUntilVisible(WebDriver driver, WebElement element) throws InterruptedException, IOException { 
try { 


    WebDriverWait wait = new WebDriverWait(driver, 20); 


    wait.until(ExpectedConditions.visibilityOf(elementToBeClicked)); 
    if (!elementToBeClicked.isDisplayed()) { 

     System.out.println("Element not visible yet. waiting some more for " + element); 
     if (waitCounter < 3) { 
      waitCounter++; 
      WaitUntilVisible(element); 
     } 
     waitCounter = 0; 
    } 

} catch (Exception e) 

{ 
    System.out.println("Handling exception"); 
} 
} 
+0

Этот код не компилируется. Вы используете несколько необъявленных переменных, и вы ввели 'Logger_Info()', который не был определен. – JeffC

+0

вам просто нужно инициализировать 'waitcounter = 0', а вместо 'logger_info' использовать 'System.our.println' – kushal