从网站获取价值,但是Java代码不起作用。怎么修?

时间:2019-03-22 00:45:19

标签: java selenium automation cucumber

我的代码不起作用。它为该行给出了错误“ int temp = Integer.parseInt(currentTemp.substring(0,currentTemp.indexOf(“˚”)));“我尝试了几种方法,但没有。可能有其他因素影响它。有解决的办法吗? 错误在这里:

背景:#darksky.feature:5     鉴于我在Darksky主页上#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的温度。     然后,我验证当前温度不大于或小于每日时间轴上的温度#DarkskySD.currentTempGreaterOrless()       java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1         在java.lang.String.substring(String.java:1967)         在framework.DarkskyTS.etr(DarkskyTS.java:138)         在stepdefinition.DarkskySD.currentTempGreaterOrless(DarkskySD.java:39)         在✽。然后我确认当前温度不大于或小于每日时间轴的温度(darksky.feature:25)

失败的方案: darksky.feature:24#场景:验证当前温度不应大于或小于每日时间轴的温度

1个场景(1个失败) 2个步骤(1个失败,1个通过) 0分5.234秒 公共无效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 :(得分:0)

该消息告诉您在试图解析的字符串中找不到"˚ "。像@Ashish一样,我怀疑这是由学位符号后面的空格引起的。您的新行应如下所示:

int lineTemp = Integer.parseInt(sLIneTemp.substring(0, sLIneTemp.indexOf("˚")));

答案 1 :(得分:0)

尝试使用indexOf(“°”)而不是使用indexOf(“°”)。它会工作。不需要在度数符号后面放置空格。

答案 2 :(得分:0)

这里是回答问题:

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 ));