2015-04-02 2 views
2

У меня проблема, и я не знаю, как ее решить. Ситуация: пользователь вводит логин и пароль, а затем он может быть на одной из двух страниц. Вопрос: как правильно проверить, на какой странице мы находимся?WebDriverWait. Быстрая проверка элемента существует или не существует

. Я хочу использовать WebDriverWait, поэтому my implicitlyWait = 0 мс,

. Я использую шаблон объекта страницы, страницы были инициализированы AjaxElementLocatorFactory

a. Так что, если я буду делать метод для проверки какой-то элемент, как это:

@FindBy(id = "pushOutMessage") 
private WebElement messageText; 

public boolean pageIsPresent() { 
    return messageText.isDisplayed(); 
} 

Это будет не правильно, потому что если страница не так, то WebDriver будет ждать N секунд для этого элемента. Таким образом, мои простые тесты медленные, очень-очень медленные.

b. Если я проверю элемент с помощью «findElement» - моя неустойчивость ждет 0 мс, поэтому, если элемент был медленно загружен, страницаIsPresent возвращает false, даже если страница права.

Надеюсь, есть и другой способ сделать это. Нужна ваша помощь!

ответ

1

Существует несколько способов сделать это. но самый простой способ будет проверить elemenet считает

Я предпочел бы сделать

@FindBy(id = "pushOutMessage") 
private List<WebElement> elements; 

public int pageIsPresent() { 
    return elements.size(); 
} 

И где-то проверить pageIsPresent() равно 0 или больше. если больше мы знаем, что элемент страницы был возвращен

И, так как вы используете шаблон pageobject и Java я бы Recommand вам создать перегрузку в BaseClass, который будет проверять на каждый раз селекторного инстанцировании нового pageobject , У меня есть git repo here с TestNG. которые могли бы помочь

+0

Спасибо за ответ! Я попытался проверить размер списка элементов, но проблема все еще существует - если элемент не существует, драйвер ждет его в течение длительного времени. – Pasha

+0

@Pasha Что ждать может произойти по другой причине. В приведенных выше кодах нет необходимости ждать. – Saifur

0

После того, как пользователь вводит или нажимает кнопку отправить или Войти вы можете сделать что-то вроде этого:

public Object clickLogin() { 
    loginElement.click(); 
    try{ 
     new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementedLocatedBy(By.id("pushOutMessage"))); 
    return PageFactory.initElements(driver, FirstPage.class); 
    } catch (TimeoutException te) { 
     return PageFactory.initElements(driver, SecondPage.class); 
    } 
} 
+0

Итак, как я понимаю, идея состоит в том, чтобы использовать другой WebDriverWait с более коротким тайм-аутом (1-3 секунды)? – Pasha

+0

yup u может это сделать ... но если вы уверены, что он будет отражать в течение этого промежутка времени. –

Смежные вопросы