2011-07-04 18 views
17

Estoy usando Selenium por primera vez y estoy abrumado por las opciones. Estoy usando el IDE en Firefox.Selenio: ¿cómo esperar a que se llenen las opciones en un seleccionar?

Cuando se carga mi página, posteriormente recupera los valores mediante una solicitud JSONP, con la que completa las opciones en una selección.

¿Cómo hago para que el selenio espere cierta opción en la selección para estar presente antes de continuar?

Respuesta

1

que consideran que debería usar

waitForElementPresent comando. Si es posible, vamos a ver tu código IDE de selenio.

2

puede utilizar el comando "WaitForSelectOption" donde su valor puede ser marcador directo como label = 1 ahorro Cuenta objetivo tendrá el ID de objeto

+0

funciona muy bien cuando lo que desea es esperar hasta obtienes la opción poblada en el elemento de selección. –

13

Solía ​​waitForElementPresent con un objetivo css.

Ejemplo: para esperar

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

a poblarse con

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

uso

  • de comandos: waitForElementPresent
  • Target: css=#myselect option[value=123]
  • Valor: (déjelo vacío)
0

Realicé la siguiente función en C# que devuelve la selección cuando se rellena.

usted tiene que pasar un Por encontrar el elemento y un tiempo específico para esperar a que se llene:

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; 
     } 
     ); 
    } 

En mi caso validar tha el selecto tiene más de 2 opciones, puede cambie el código para que valide la cantidad que se ajuste a sus necesidades.

1

Tuvimos un problema similar cuando las opciones dentro del menú desplegable se obtuvieron de un servicio de terceros, que a veces era una operación más lenta.

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

aquí es la definición de 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); 
         } 
        }); 
     } 

. Nota: Una verificación de select.getOptions())> 1 fue necesaria tamaño (en nuestro caso, ya que tenía una opción estática siempre a la vista.

+0

¿Cómo se obtiene acceso a las clases Select? ¿Es de algún otro paquete Nuget de selenio? – stian64

0

Su trabajo para mí:

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

he encontrado muy bien algo como:

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

Usando java 8Awaitility

Awaitility.await() 
.atMost(5, TimeUnit.SECONDS) 
.until(() -> select.getOptions().size() > 0); 
Cuestiones relacionadas