На самом деле у меня такое же исключение, и я сначала ищу причину, отслеживаю трассировку стека и отлаживаю код селена. Это мое обучение;
Я использовал удаленный сервер селена
Версия Selenium:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.39.0</version>
<scope>test</scope>
</dependency>
Это иерархия вызовов selenium.isTextPresent()
Иерархия вызовов
public boolean isTextPresent(String pattern) {
return commandProcessor.getBoolean("isTextPresent", new String[] {pattern,});
}
public boolean getBoolean(String commandName, String[] args) {
String result = getString(commandName, args);
..........
..............
}
public String getString(String commandName, String[] args) {
String result = doCommand(commandName, args);
..........
..............
}
public String doCommand(String commandName, String[] args) {
DefaultRemoteCommand command = new DefaultRemoteCommand(commandName, args);
String result = executeCommandOnServlet(command.getCommandURLString());
..........
..............
}
/** Sends the specified command string to the bridge servlet */
public String executeCommandOnServlet(String command) {
try {
return getCommandResponseAsString(command);
} catch (IOException e) {
..........
..............
}
}
Мое понимание
Пока здесь не существует только фактический исполнитель иерархии вызововМетод getCommandResponseAsString(String command)
, поэтому трудно получить точный (на самом деле я имею в виду стабильный) результат отладки этого метода, потому что при проверке реализации кажется, что метод проверяет код ответа HttpURLConnection.HTTP_OK
(его значение равно 200), если код ответавсе в порядке, он возвращает выполненную строку, но некоторые трудоемкие случаи это не так и бросить throwAssertionFailureExceptionOrError(uc.getResponseMessage());
Метод реализации
protected String getCommandResponseAsString(String command) throws IOException {
String responseString = null;
int responsecode = HttpURLConnection.HTTP_MOVED_PERM;
HttpURLConnection uc = null;
Writer wr = null;
Reader rdr = null;
while (responsecode == HttpURLConnection.HTTP_MOVED_PERM) {
URL result = new URL(pathToServlet);
String body = buildCommandBody(command);
try {
uc = getHttpUrlConnection(result);
uc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
uc.setInstanceFollowRedirects(false);
uc.setDoOutput(true);
wr = getOutputStreamWriter(uc);
wr.write(body);
wr.flush();
responsecode = getResponseCode(uc);
if (responsecode == HttpURLConnection.HTTP_MOVED_PERM) {
pathToServlet = uc.getHeaderField("Location");
} else if (responsecode != HttpURLConnection.HTTP_OK) {
throwAssertionFailureExceptionOrError(uc.getResponseMessage());
} else {
rdr = getInputStreamReader(uc);
responseString = stringContentsOfInputStream(rdr);
}
} finally {
closeResources(uc, wr, rdr);
}
}
return responseString;
}
Грязное решение
Я пытаюсьобъясните причину выше, поэтому, пока я не найду идеальный способ, я продолжу свое тестирование с использованием метода Thread.sleep () или selenium.setSpeed (1000) до использования метода selenium.isTextPresent ().