Я пишу несколько тестов для своего веб-сайта на основе Java/Spring/Boostrap, используя Selenium 2.37.1 и Chrome Driver 2.7 (с Chrome 31.0.1650.63 в Ubuntu 13.10).
Тест щелкает текст входа, а затем пытается ввести предоставленное имя пользователя и пароль в форму, прежде чем нажать кнопку отправки. Я разбил поиск элементов и вызов sendKeys, чтобы определить, где следует Selenium (это на username.sendKeys
)
public void login(final String user) {
webDriver.findElement(By.id("login")).click();
final WebElement loginForm = webDriver.findElement(By.id("loginForm"));
final WebElement username = loginForm.findElement(By.id("username"));
username.sendKeys(user);
final WebElement password = loginForm.findElement(By.id("password"));
password.sendKeys(dslConstants.PASSWORD);
loginForm.submit();
}
Имя пользователя найдено успешно, но когда я запускаю username.isDisplayed()
, когда оно действительно отображается.
Я предполагаю, что это как-то связано с тем, что Selenium не может правильно обрабатывать всплывающие окна Bootstrap, и мне интересно, есть ли у кого-нибудь какие-либо исправления для этого?
Заранее спасибо.
РЕДАКТИРОВАТЬ: loginForm.isDisplayed()
также возвращает false, когда он виден при отладке. Я также попытался добавить условие ожидания, что также не решает ситуацию.
final WebDriverWait wait = new WebDriverWait(webDriver, TIME_OUT_IN_SECONDS);
wait.until(ExpectedConditions.visibilityOf(webDriver.findElement(By.id("username"))));
Edit2: Вот аспекты HTML/JSTL страницы.
<div class="navbar">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
<sec:authorize ifAnyGranted="ROLE_ANONYMOUS">
<div class="hide" id="login-popover">
<form role="form" id="loginForm" method="post" action="j_spring_security_check">
<div class="control-group">
<label class="control-label" for="username">Username</label>
<div class="controls">
<input type="text" id="username" class="form-control" name="j_username" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
<input type="password" id="password" class="form-control" name="j_password" />
</div>
</div>
<div class="control-group">
<div class="controls">
<button class="btn btn-primary" type="submit">Login</button>
</div>
</div>
</form>
</div>
<li><a href="#" id="login">Login</a></li>
<li><a href="/accounts/register">Register</a></li>
</sec:authorize>
</ul>
</div>
РЕДАКТИРОВАТЬ 3: Это также происходит при использовании FireFox 25.