2012-12-17 13 views
5

Witam Muszę sprawdzić, czy pole rozwijane ma podane wartości, ale te wartości nie są wybrane, aby nie wyświetlały się w polu rozwijanym. Mam następujący XPath dla elementuJaka jest alternatywa selenu.isElementPresent w Webdriver

//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not='] 

który identyfikuje element poprawnie w przeglądarce. Ale kiedy używam następującej metody zarządzania kamerą internetową, aby ją zweryfikować, zwracam wartość false, ponieważ nie jest wyświetlana w polu.

Czy możesz mi podać alternatywę dla tego.

Odpowiedz

8

Chcecie:

private boolean isElementPresent(WebDriver driver, By by){ 
    return driver.findElements(by).count != 0; 
} 

findElements() jest lepiej niż ten findElement() ponieważ nie będzie czekać, jeśli element nie jest obecny. Jeśli korzystasz z domniemanego oczekiwania, findElement() przerwie wyszukiwanie elementu (to wyjątek, który łapiesz), a to zajmie trochę czasu.

+0

Dlaczego testowanie zwrotu jest równe zeru, jeśli testujesz, czy element jest obecny? –

+0

@MatthewLock DOH! Dzięki, porównanie zostało odwrócone, teraz zostało naprawione. –

4

Dowiedziałem się, że WebDriver nie ma funkcji o nazwie isElementPresent(). Była to jedna z ważnych funkcji użytych w Selenium 1.0. Aby zaimplementować to w WebDriver, wystarczy napisać metodę opisaną poniżej. Następnie można użyć tej funkcji w przypadku każdego rodzaju By (By.id, BY.name, etc.)

private boolean isElementPresent(WebDriver driver, By by){ 
    try{ 
    driver.findElement(by); 
    return true; 
    }catch(NoSuchElementException e){ 
    return false; 
    } 
} 

A oto przykład, jak można by nazwać tę funkcję

if (isElementPresent(by.id("btnSubmit")) { 
    // preform some actions 
} 

powyższa funkcja zwróci wartość true, jeśli element zostanie znaleziony na stronie, w przeciwnym razie zwróci wartość false.

+1

@Arunku powyższy kod jest łatwiejszy do odczytania i można go użyć ponownie. Jedyną dodatkową sugestią jest poprawienie kodu, w tym limitu czasu. Ponieważ zwykle czekiem jest, aby element pojawił się w pewnym przedziale czasowym. –

+0

-1 dla 'findElement()' -with-timeout zamiast 'findElements()' -with-count. –

0
internal static bool IsElementPresent(IWebDriver driver, By by, int timeoutSeconds=10) 
    { 

     for (int second = 0; second< timeoutSeconds ; second++) 
     { 
      try 
      { 
       driver.FindElement(by); 
      } 
      catch (NoSuchElementException e) 
      { 
       Thread.Sleep(1000); 
       continue; 
      } 

      return true; 
     } 

     return false; 

    } 
0

Zastosowanie isDisplayed() dla sprawdzenia, czy element jest dostępny na stronie.

Powiązane problemy