Получить значение с веб-сайта, но код Java не работает. как исправить? - PullRequest
0 голосов
/ 22 марта 2019

Мой код не работает. для этой строки выдается ошибка "int temp = Integer.parseInt (currentTemp.substring (0, currentTemp.indexOf (" ˚ ")));" Я пробовал несколько способов, но не смог. Может быть, другой фактор влияет на это. Есть идея починить? Ошибка здесь:

Фон: # darksky.feature: 5 Учитывая, что я на Darksky Home Page # DarkskySD.iAmOnDarkskyHomePage () Текущая температура: 43 ° Текущая температура: 43˚ Дождь.

java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: -1

at java.lang.String.substring(String.java:1967)
at framework.DarkskyTS.etr(DarkskyTS.java:138)
at stepdefinition.DarkskySD.currentTempGreaterOrless(DarkskySD.java:39)
at ✽.Then I verify current temp is not greater or less then temps from daily timeline(darksky.feature:25)

@ currenttempgreaterorless Сценарий: Убедитесь, что текущая температура не должна быть больше или меньше, чем температура на дневной временной шкале # darksky.feature: 24 Затем я проверяю, что текущая временная температура не больше или меньше временных значений на дневной временной шкале. java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: -1 в java.lang.String.substring (String.java:1967) на framework.DarkskyTS.etr (DarkskyTS.java:138) на шаге определения. DarkskySD.currentTempGreaterOrless (DarkskySD.java:39) в T. Затем я проверяю, что текущая температура не больше или меньше, чем временная температура от дневного графика времени (darksky.feature: 25)

Неудачные сценарии: darksky.feature: 24 # Сценарий: убедитесь, что текущая температура не должна быть больше или меньше температуры дневного графика времени

1 сценарий (1 сбой) 2 шага (1 не пройден, 1 пройден) 0m5.234s public void tempValue () {

    String currentTemp = SharedSD.getDriver().findElement(By.cssSelector(".summary.swap")).getText();
    System. out.println("Current Temp:" + currentTemp);
    List<WebElement> tempsInTimeLine = SharedSD.getDriver().findElements(By.cssSelector(".temps span:last-child"));
    int temp = Integer.parseInt(currentTemp.substring(0, currentTemp.indexOf("˚ ")));
    int highestInTimeLine = temp;
    int lowestInTimeLine = temp;
    for (WebElement tempInTime: tempsInTimeLine) {
        String sLIneTemp = tempInTime.getText();
        int lineTemp = Integer.parseInt(sLIneTemp.substring(0, sLIneTemp.indexOf("˚ ")));
        if (lineTemp > highestInTimeLine){
            highestInTimeLine  = lineTemp;
        }
        if (lineTemp < lowestInTimeLine ){
            lowestInTimeLine = lineTemp;
        }
        //int lineTemp = Integer.parseInt(sLIneTemp.substring(0, sLIneTemp.indexOf("˚ ")));
    }

    System. out.println("Highest Temp:" + highestInTimeLine);
    System. out.println("Lowest Temp:" + lowestInTimeLine );
}

Ответы [ 3 ]

0 голосов
/ 22 марта 2019

Вместо использования indexOf ("°"), попробуйте использовать indexOf ("°"). Это будет работать. Пробел, который вы ставите после символа градуса, не нужен.

0 голосов
/ 29 марта 2019

Вот ответьте на вопрос:

driver.get("https://darksky.net/forecast/40.7127,-74.0059/us12/en");
String currentTemp =          driver.findElement(By.cssSelector(".summary.swap")).getText();
System.out.println("Current Temp:" + currentTemp);
List<WebElement> tempsInTimeLine = driver.findElements(By.cssSelector(".temps  span:last-child"));
int temp = Integer.parseInt(currentTemp.substring(0, 2));
int highestInTimeLine = temp;
int lowestInTimeLine = temp;
for (WebElement tempInTime: tempsInTimeLine) {
String sLIneTemp = tempInTime.getText();
int lineTemp = Integer.parseInt(sLIneTemp.substring(0, 2));
if (lineTemp > highestInTimeLine){
    highestInTimeLine  = lineTemp;
}
if (lineTemp < lowestInTimeLine ){
    lowestInTimeLine = lineTemp;
}

}

System.out.println("Highest Temp:" + Integer.toString(highestInTimeLine));
System.out.println("Lowest Temp:" + Integer.toString(lowestInTimeLine ));
0 голосов
/ 22 марта 2019

Это сообщение говорит вам, что "˚ " не может быть найдено в строке, которую вы пытаетесь проанализировать.Как и @Ashish, я подозреваю, что это вызвано пробелом после вашего символа степени.Ваша новая строка должна выглядеть так:

int lineTemp = Integer.parseInt(sLIneTemp.substring(0, sLIneTemp.indexOf("˚")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...