2016-11-30 5 views
1

Я не могу щелкнуть элемент в списке, как только я нажал на раскрывающийся список?Webdriver Подождите, пока появится ТЕКСТ

Метод, который я создал, который не работает.

public static void waitForTextToAppearAndClick(WebDriver driver, WebElement element, String textToAppear) throws InterruptedException{ 
    WebDriverWait wait = new WebDriverWait(driver, 10); 

    wait.until(ExpectedConditions.visibilityOf(element)); 
    WebElement locator = element; 
    locator.click(); 

    WebElement textToClick = driver.findElement(By.linkText(textToAppear)); 
    wait.until(ExpectedConditions.elementToBeClickable(textToClick)); 
    textToClick.click(); 
} 

Использование thread.sleep, кажется, работает, но я не хочу использовать этот метод, может кто-нибудь рекомендовать способ подождать и нажать на конкретный текстовый элемент, как только я нажал на кнопку первичного?

public static void waitForTextToAppearAndClick(WebDriver driver, WebElement element, String textToAppear) throws InterruptedException{ 
    WebDriverWait wait = new WebDriverWait(driver, 10); 

    wait.until(ExpectedConditions.visibilityOf(element)); 
    WebElement locator = element; 
    locator.click(); 

    Thread.sleep(3000); 
    driver.findElement(By.linkText(textToAppear)).click();; 

} 

Пожалуйста, обратите внимание, мне нужно нажать на барбекю Соус, то thread.sleep() успешна при необходимости нажмите на барбекю Соус

enter image description here

Благодаря вашей помощи

+0

вы можете также добавить след исключения для нашей ссылки? –

+1

Используйте существующие ожидаемые условия, например: \t textToBePresentInElement или \t textToBePresentInElementValue. Проверьте API - \t textToBePresentInElement. – Grasshopper

+0

Пожалуйста, разместите соответствующий HTML-код. – JeffC

ответ

0

Используйте свой собственный внедрение FluentWait, чтобы ждать, пока текст не появится после вашего нажатия:

Wait wait = new FluentWait<>(this.driver) 
    .withTimeout(driverTimeoutSeconds, TimeUnit.SECONDS) 
    .pollingEvery(500, TimeUnit.MILLISECONDS) 
    .ignoring(StaleElementReferenceException.class) 
    .ignoring(NoSuchElementException.class) 
    .ignoring(ElementNotVisibleException.class); 

WebElement foo = wait.until(new Function() { 
    public WebElement apply(WebDriver driver) { 
    return element.getText().length() > 0; 
    } 
}); 
0

всего спасибо за вашу помощь следующего метод кажется Совершено трюк:

public static void waitForTextToAppearAndClick(WebDriver driver, WebElement element, String textToAppear) throws InterruptedException{ 
    WebDriverWait wait = new WebDriverWait(driver, 10); 

    wait.until(ExpectedConditions.visibilityOf(element)); 
    WebElement locator = element; 
    locator.click(); 

    wait.until(ExpectedConditions.elementToBeClickable(By.linkText(textToAppear))); 
    driver.findElement(By.linkText(textToAppear)).click(); 
} 
Смежные вопросы