0

Я хочу выбрать этот вариант в раскрывающемся меню. Я пробовал несколько способов, но я потерпел неудачу.Как выбрать значение из выпадающего меню

Я пробовал:

WebDriverWait wait = new WebDriverWait (driver, 5); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("iMacs"))); 

    WebDriverWait wait = new WebDriverWait(driver, 10); 
    wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("iMacs"))); 
    waitForElementToBeDisplayed(driver.findElement(By.linkText("iMacs")), 200); 
    WebDriverWait wait = new WebDriverWait(driver, 30); 
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[text()='iMacs']"))); 

Это мой код:

  WebElement element = driver.findElement(By.linkText("Product Category")); 
      Actions action = new Actions(driver); 
      action.moveToElement(element).perform(); 
      WebDriverWait wait = new WebDriverWait (driver, 5); 
      wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("iMacs"))); 
      WebElement subElement = driver.findElement(By.linkText("iMacs")); 
      action.moveToElement(subElement); 
      action.click(); 
      action.perform(); 

Это моя ошибка:

org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.linkText: iMacs (tried for 5 second(s) with 500 MILLISECONDS interval) 
+0

Просьба обмениваться html-фрагментом, чтобы помочь! –

ответ

0

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

Ваш код не будет работать на wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("iMacs")));

Попробуйте с wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("iMacs"))); вместо и посмотреть, если это не удается, тогда (и то, что исключение он выбрасывает в этом случае).

И почему вы используете Action API для выполнения щелчка?

+0

Такая же ошибка. Я использую это, потому что не знаю, что еще попробовать. Я новичок в тестировании. У вас есть другое решение? –

+0

Хорошо, посмотрите мое обновление и эти 3 вопроса. Для щелчка вы можете использовать 'subElement.click()' вместо этих 3 строк действий. – acikojevic

+0

Я использую хром-драйвер. Мой тест делает все, что нужно, чтобы использовать, чем то, что я сказал, что я использовал, проблема в том, что иногда выпадает тест, используемый для передачи. –

0

Я попытался выполнить ваш код в Chrome, и он всегда работал на меня. Однако, как иногда это не удается для вас, вы можете поместить механизм восстановления в коде, как показано ниже:

WebElement element = driver.findElement(By.linkText("Product Category")); 
Actions action = new Actions(driver); 
action.moveToElement(element).perform(); 
WebDriverWait wait = new WebDriverWait (driver, 5); 
try { 
     wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("iMacs"))); 
} catch (WebDriverException we) { 
     System.out.println("First attempt to wait for visibility of 'iMacs' failed. Retrying..."); 
     action.moveToElement(driver.findElement(By.linkText("Product Category"))).perform(); 
     wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("iMacs"))); 
} 
WebElement subElement = driver.findElement(By.linkText("iMacs")); 
action.moveToElement(subElement); 
action.click(); 
action.perform(); 

Приведенный выше код должен всегда работать. Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.

+0

Мне не нужно нажимать на раскрывающееся меню, мне просто нужно перемещаться по меню. Этот тест сайта: http://store.demoqa.com/. –

+0

Пожалуйста, попробуйте модифицированный код и дайте мне знать, если он решит вашу проблему. – Mahipal

0

Пожалуйста, проверьте также вариант sendkeys. Может быть, это поможет в вашем коде.

driver.findElement(By.xpath("code']")).sendKeys("testdata"); 
Смежные вопросы