我正在使用硒库进行测试。但是下面的代码给了我类强制转换异常。我已经用谷歌搜索了这个异常,但是没有得到解决方案。我对Https连接和http连接感到困惑。帮助我解决此异常。谢谢
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import sun.net.www.protocol.http.HttpURLConnection;
public class TestMakeMySushi {
private static final String HttpURLConnection = null;
public static void main(String[] args) throws InterruptedException, MalformedURLException, IOException {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Dev-24\\Downloads\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
driver.get("https://www.makemysushi.com/404?");
List<WebElement> linklist = driver.findElements(By.tagName("a"));
linklist.addAll(driver.findElements(By.tagName("img")));
System.out.println("size of all link and images list" + linklist.size());
List<WebElement> activelist = new ArrayList<WebElement>();
for (int i = 0; i < linklist.size(); i++) {
System.out.println(linklist.get(i).getAttribute("href"));
if (linklist.get(i).getAttribute("href") != null && (!linklist.get(i).getAttribute("href").contains("javascript"))) {
activelist.add(linklist.get(i));
}
}
System.out.println("size of activelink list" + activelist.size());
for (int j = 0; j < activelist.size(); j++) {
HttpURLConnection connection = (HttpURLConnection) new URL(activelist.get(j).getAttribute("href")).openConnection();
connection.connect();
String response = connection.getResponseMessage();
connection.disconnect();
System.out.println(activelist.get(j).getAttribute("href") + "----" + response);
}
}
}
我面临的异常
Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to sun.net.www.protocol.http.HttpURLConnection
at TestMakeMySushi.main(TestMakeMySushi.java:76)
C:\Users\Dev-24\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
答案 0 :(得分:2)
将HttpURLConnection
类的导入语句从import sun.net.www.protocol.http.HttpURLConnection;
更改为import java.net.HttpURLConnection;
。
您不应该在应用程序代码中使用sun
包和类。它们是JVM内部的。
答案 1 :(得分:0)
@KarolDowbecki的分析方向正确。
而不是sun.net.www.protocol.http.HttpURLConnection;
HttpURLConnection 应该通过以下方式解决:
import java.net.HttpURLConnection;
我能够执行您的程序,并产生以下输出:
size of all link and images list81
https://makemysushi.com/404#navigation
https://makemysushi.com/
https://makemysushi.com/
https://makemysushi.com/sushi-university
https://makemysushi.com/sushi-recipes
https://makemysushi.com/sushi-essentials
https://makemysushi.com/store
https://www.facebook.com/Makemysushi/
https://www.instagram.com/explore/tags/makemysushi/
https://plus.google.com/+Makemysushi
mailto:info@makemysushi.com // <-- this href attribute is of MailToURLConnection type raising the java.lang.ClassCastException which can't be casted to HttpURLConnection type
.
.
.
https://makemysushi.com/Sushi-share/contact-us
https://makemysushi.com/Sushi-share/about-us
null
null
null
null
size of activelink list77
https://makemysushi.com/404#navigation----Not Found
https://makemysushi.com/----OK
https://makemysushi.com/----OK
https://makemysushi.com/sushi-university----OK
https://makemysushi.com/sushi-recipes----OK
https://makemysushi.com/sushi-essentials----OK
https://makemysushi.com/store----OK
https://www.facebook.com/Makemysushi/----OK
https://www.instagram.com/explore/tags/makemysushi/----OK
https://plus.google.com/+Makemysushi----OK
Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.mailto.MailToURLConnection cannot be cast to java.net.HttpURLConnection
at demo.TestMakeMySushi.main(TestMakeMySushi.java:48)
列表 活动列表包含一个元素:
<a href="mailto:info@makemysushi.com" target="_blank"><i id="social-em" class="fa fa-envelope-square fa-3x social"></i></a>
当您尝试通过 href 属性 mailto:info@makemysushi.com 建立连接时,如下所示:
HttpURLConnection connection = (HttpURLConnection) new URL(activelist.get(j).getAttribute("href")).openConnection();
无法建立成功的连接,因为 MailToURLConnection 对象无法转换为 HttpURLConnection 对象并引发 java.lang.ClassCastException >
答案 2 :(得分:0)
我因为导入而面临相同的问题
导入com.sun.net.ssl.HttpsURLConnection;
删除该文件,然后在下面导入
导入javax.net.ssl.HttpsURLConnection;