从网站获取价值,但 java 代码不起作用。怎么修?
Get value from website but java code does not work. how to fix?
我的代码不工作。它给出了这一行的错误 "int temp = Integer.parseInt(currentTemp.substring(0, currentTemp.indexOf("˚ ")));"我尝试了几种方法,但我做不到。也许不同的因素会影响它。有什么办法可以解决吗?
错误在这里:
背景:#darksky.feature:5
假设我在 Darksky 主页上 # DarkskySD.iAmOnDarkskyHomePage()
当前温度:43°
当前 Temp: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)
在步骤定义处。DarkskySD.currentTempGreaterOrless(DarkskySD.java:39)
在✽。然后我验证当前温度不高于或低于每日时间线的温度(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 );
}
该消息告诉您在您尝试解析的字符串中找不到 "˚ "
。与@Ashish 一样,我怀疑这是由学位符号后的 space 引起的。您的新行应如下所示:
int lineTemp = Integer.parseInt(sLIneTemp.substring(0, sLIneTemp.indexOf("˚")));
尝试使用 indexOf("°") 而不是使用 indexOf("° ")。它会起作用。您在度数符号后放置的 space 是不必要的。
这里是回答问题:
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 ));
我运行进入同样的问题。我不确定我的环境是否有问题。
当我调试 indexOf("°")
调用时,我看到它认为参数是 "°"
而不仅仅是 "°"
。我将其更改为 '°'
并且有效。
但是,当 运行 mvn clean install
时,我注意到一个警告 -
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
所以文件是 UTF-8(不确定它是否有 BOM)并且被 Maven 误解了。
转到他们的常见问题解答,他们建议添加 -
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
在 <properties>
.
下
我加了,运行git checkout -- path/to/file.java
得到原来的code/encoding重新运行mvn clean install
。
警告不再发出,问题已解决。
我的代码不工作。它给出了这一行的错误 "int temp = Integer.parseInt(currentTemp.substring(0, currentTemp.indexOf("˚ ")));"我尝试了几种方法,但我做不到。也许不同的因素会影响它。有什么办法可以解决吗? 错误在这里:
背景:#darksky.feature:5 假设我在 Darksky 主页上 # DarkskySD.iAmOnDarkskyHomePage() 当前温度:43° 当前 Temp: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) 在步骤定义处。DarkskySD.currentTempGreaterOrless(DarkskySD.java:39) 在✽。然后我验证当前温度不高于或低于每日时间线的温度(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 );
}
该消息告诉您在您尝试解析的字符串中找不到 "˚ "
。与@Ashish 一样,我怀疑这是由学位符号后的 space 引起的。您的新行应如下所示:
int lineTemp = Integer.parseInt(sLIneTemp.substring(0, sLIneTemp.indexOf("˚")));
尝试使用 indexOf("°") 而不是使用 indexOf("° ")。它会起作用。您在度数符号后放置的 space 是不必要的。
这里是回答问题:
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 ));
我运行进入同样的问题。我不确定我的环境是否有问题。
当我调试 indexOf("°")
调用时,我看到它认为参数是 "°"
而不仅仅是 "°"
。我将其更改为 '°'
并且有效。
但是,当 运行 mvn clean install
时,我注意到一个警告 -
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
所以文件是 UTF-8(不确定它是否有 BOM)并且被 Maven 误解了。
转到他们的常见问题解答,他们建议添加 -
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
在 <properties>
.
我加了,运行git checkout -- path/to/file.java
得到原来的code/encoding重新运行mvn clean install
。
警告不再发出,问题已解决。