Селен - текст, введенный в одно и то же поле, даже если он предназначен для ввода в разных полях
Используя селен, при попытке ввода имени пользователя и пароля в форме входа в систему иногда текст вводится в одно и то же поле. Имя пользователя и пароль имеют уникальный идентификатор.
Для отправки ключей выполняются следующие шаги.
sendKeys(By.id("login_username"), "abc");
sendKeys(By.id("login_password"), "efg");
public void sendKeys(By locator, String text) {
WebElement element = findElement(locator);
if(element != null) {
element.clear();
element.sendKeys();
}
}
public WebElement findElement(By locator) {
return wait(org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated(locator));
}
public WebElement wait(ExpectedCondition<WebElement> condition) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver).pollingEvery(1, TimeUnit.SECONDS)
.withTimeout(60, TimeUnit.SECONDS)
.ignoreAll(Arrays.asList(NoSuchElementException.class, TimeoutException.class));
return wait.until(condition);
}
Но каким-то образом, при вводе текста, как имя пользователя, так и текст пароля вводятся в поле пароля. Это не всегда происходит, хотя. Не в состоянии понять, что может пойти не так или что проверить. Какие-либо предложения...
platform: Ubuntu 16.04.1 LTS 64-bit
chromedriver version: 2.25
chrome browser version: 55.0.2883.87
Заранее спасибо.
1 ответ
sendKeys()
Действие выполняет следующие шаги:
- Получает координаты элемента
- Клики по полученным координатам (с помощью действия мыши)
- "Типы" текста (который будет получен любым элементом, на котором в данный момент находится фокус)
Он может пойти не так, если элемент не может быть сфокусирован при запуске действия (например, потому что он отключен), или если координаты меняются между получением координат и щелчком / фокусировкой элемента (потому что макет все еще меняется).
Другой распространенной причиной может быть действие onClick, подключенное к элементу, которое может привести к условиям гонки. Не видя реальной страницы, возможно, что после щелчков селена действие onClick все еще работает, когда текст набирается. В основном это выглядит так:
- Селен клики
- начинается действие onClick (элемент может быть сфокусирован только после его завершения)
- Selenium начинает печатать (onClick еще не вернулся, поэтому неправильные элементы получают текст)
- действие onClick завершается, но к тому времени Selenium также завершается.
В качестве решения вы можете попробовать сфокусировать элемент напрямую и подождать, пока он действительно не сфокусируется, перед отправкой ключей. Этот вопрос может быть полезен для этого случая.