2011-07-04 11 views

Odpowiedz

1

myślę, że należy być wykorzystywać

waitForElementPresent polecenie. Jeśli to możliwe, pozwól mi zobaczyć twój kod IDE selenu.

2

Można użyć polecenia „WaitForSelectOption”, gdzie wartość może być bezpośrednie etykieta jak label = 1 oszczędzania Konto cel będzie miał identyfikator obiektu

+0

działa świetnie gdy chcesz po prostu poczekać, aż otrzymujesz opcję zapełnioną w elemencie select. –

13

użyłem waitForElementPresent z celem css.

Przykład: czekać

<select id="myselect"></select> 

być wypełniona

<option value="123">One-two-three</option> 

stosowania

  • Polecenie: waitForElementPresent
  • docelowa: css=#myselect option[value=123]
  • Wartość: (zostaw to puste)
0

Zrobiłem następującą funkcję w C#, która zwraca zaznaczenie, gdy jest wypełniona.

Trzeba przejść przez Aby znaleźć element i konkretny czas, aby czekać na to, aby być wypełnione:

public static SelectElement FindSelectElementWhenPopulated(this IWebDriver driver, By by, int delayInSeconds) 
    { 
     WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(delayInSeconds)); 
     return wait.Until<SelectElement>(drv => 
     { 
      SelectElement element = new SelectElement(drv.FindElement(by)); 
      if (element.Options.Count >= 2) 
      { 
       return element; 
      } 

      return null; 
     } 
     ); 
    } 

W moim przypadku walidacji tha select ma więcej niż 2 opcje, można zmień kod tak, aby potwierdził ilość, która pasuje do twoich potrzeb.

1

Mamy podobny problem, gdy opcje w rozwijanym menu zostały pobrane z usługi innej firmy, co czasem było wolniejszą operacją.

Select select = new Select(driver.findElement(cssSelector("cssSelectorOfSelectBox")));  
waitUnitlSelectOptionsPopulated(select) 

oto definicja waitUnitlSelectOptionsPopulated

private void waitUntilSelectOptionsPopulated(final Select select) { 
      new FluentWait<WebDriver>(driver) 
        .withTimeout(60, TimeUnit.SECONDS) 
        .pollingEvery(10, TimeUnit.MILLISECONDS) 
        .until(new Predicate<WebDriver>() { 
         public boolean apply(WebDriver d) { 
          return (select.getOptions().size() > 1); 
         } 
        }); 
     } 

Uwaga: a. Sprawdzenie select.getOptions() wielkość()> 1 była potrzebna w naszym przypadku, mieliśmy jedną opcję statyczną zawsze wyświetlany.

+0

Jak uzyskać dostęp do wybranych zajęć? czy to z jakiegoś innego pakietu selenowego Nuget? – stian64

0

Jego praca dla mnie:

WebElement element = driver.findElement(By.xpath("//select[@name='NamE']/option[1]")); 
    return element.getAttribute("text"); 
0

znalazłem poręczny coś takiego:

wait.until(
    ExpectedConditions 
     .presenceOfNestedElementsLocatedBy(By.id(<selectioNId>), By.tagName("option")) 
) 
0

Korzystanie Java 8Awaitility

Awaitility.await() 
.atMost(5, TimeUnit.SECONDS) 
.until(() -> select.getOptions().size() > 0); 
Powiązane problemy