0

Мое приложение использует футляр для ремешка. Все поля приложения сохраняются в операции выгрузки (когда фокус перемещается из поля).Как уменьшить скорость выполнения селена

код:

driver.findElement(By.id("author")).sendkeys("xyz"); 
driver.findElement(By.xpath("url")).sendkeys("aaa"); 

Проблема:
Когда фокус перемещается из поля author Ajax запрос отправляется и занимает минимум 2-3s ответить обратно. Между временем ожидания выполняются мои следующие строки кода, т. Е. (Здесь url и т. Д.). Точная проблема - после ответа сервера приложение удаляет все значения полей, которые были введены до получения ответа.

Я думал, что решение будет заключаться в уменьшении скорости выполнения. Но я знаю, что в веб-драйвере у нас нет опции setspeed, как в RC.

Я не думаю, что неявной и Явная поможет. Поскольку элемент будет присутствовать в DOM.

Возможно ли какое-либо другое обходное решение или возможное решение для преодоления этого? ТИА.

+0

Вы говорите, что вам нужно подождать, прежде чем вводить данные в следующее поле, но как пользователь, использующий это приложение, * знает *, что они должны ждать, прежде чем вводить в другие поля? – Louis

+0

@Louis: В производстве ответ очень быстрый, и пользователь не сталкивается с какой-либо проблемой. Но набор регрессии должен быть запущен в QA. Там я столкнулся с проблемой из-за времени ожидания ответа. – Manigandan

+0

@Manigandan В этом случае вы должны отразить свою производственную коробку. В этом весь смысл тестирования. Зеркально произведите производство как можно больше – Saifur

ответ

0

Да, вы можете использовать неявное или явное ожидание, но неявное ожидание будет применимо для жизни экземпляра объекта WebDriver (если вы не измените его снова), так что вы можете пойти с явным ожиданием или беглым ожиданием.

Явное ожидание

WebDriverWait wait = new WebDriverWait(driver, 30); 
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("foo"))); 

Fluent Wait

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) 
    .withTimeout(30, SECONDS) 
    .pollingEvery(5, SECONDS) 
    .ignoring(NoSuchElementException.class); 

    WebElement foo = wait.until(new Function<WebDriver, WebElement>() 
    { 
     public WebElement apply(WebDriver driver) { 
     return driver.findElement(By.id("foo")); 
    } 
}); 

Лично я предпочитаю Явный/Fluent ждать более неявной ожидания. Вы можете проверить этот действительно хороший ответ о сравнении разных ожиданий https://sqa.stackexchange.com/questions/12866/how-fluentwait-is-different-from-webdriverwait

0

Другой подход - это захват сетевого трафика. Затем вы сможете узнать, когда был отправлен запрос ajax и поймать ответ. Таким образом, ваша логика будет определяться присвоенным запросом/ответом ajax. См. Пример Java here.

+0

Ссылка, предоставленная вами, относится к 'selenium' (версия 1), но вопрос помечен как' selenium-webdriver' или версия 2, если вы предпочитаете эту формулировку –

+0

Кроме этого, для достижения этого может использоваться прокси-сервер, у меня есть ответил на вопрос о настройке прокси-сервера [здесь] (http://stackoverflow.com/a/18827260/1315120). –

+0

Согласен. Есть много способов реализовать этот захват, я просто хотел проиллюстрировать идею, – Eugene

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