断开的链接(404 和 500 resposecode)在使用 Java 的Selenium上运行时抛出"ok"消息



我正在尝试验证应用程序中的所有断开链接(404 和 500(...我研究并尝试运行一个脚本。我看到所有链接都显示"ok"消息,无论链接是否断开。任何帮助将不胜感激。

List<WebElement> links = myD.findElements(By.tagName("a"));
System.out.println("Total links are " + links.size());
for (int i = 0; i < links.size(); i++) {
WebElement sle = links.get(i);
String url = sle.getAttribute("href");
verifyLinkActive(url);
}
}

public static void verifyLinkActive(String linkUrl) {
try {
URL url = new URL(linkUrl);
HttpURLConnection httpURLConnect = (HttpURLConnection) url.openConnection();
httpURLConnect.setConnectTimeout(3000);
httpURLConnect.connect();
if (httpURLConnect.getResponseCode() == 200) {
System.out.println(linkUrl + " - " + httpURLConnect.getResponseMessage());
}
if (httpURLConnect.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
System.out.println(linkUrl + " -" + httpURLConnect.getResponseMessage() + " - " + HttpURLConnection.HTTP_NOT_FOUND);*/
}
} catch (Exception e) {
}
}

我在Katalon工作室(时髦(遇到了同样的问题。这工作正常:

import java.security.cert.X509Certificate
import javax.net.ssl.HostnameVerifier
import javax.net.ssl.HttpsURLConnection
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLHandshakeException
import javax.net.ssl.SSLSession
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
import javax.security.cert.CertificateException
import java.net.SocketTimeoutException
import java.net.ConnectException
import org.apache.commons.validator.routines.UrlValidator
import com.kms.katalon.core.annotation.Keyword
import com.kms.katalon.core.util.KeywordUtil
public class LinkChecker {
@Keyword
def trustAllCerts() {
TrustManager trustManager = new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null
}
public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {}
public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {}
}
}
@Keyword
def hitLinks(ArrayList<String> links) {
ArrayList<List<String>> results = new ArrayList<List<String>>()
ArrayList<URL> urls = new ArrayList<URL>()
for (String link: links) {
if (isValidUrl(link)) {
urls.add(new URL(link))
}
}
TrustManager[] trustAllCerts = trustAllCerts()
SSLContext sc = SSLContext.getInstance("SSL")
sc.init(null, trustAllCerts, new java.security.SecureRandom())
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory())
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true
}
}
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid)
for (URL url: urls) {
CharSequence u = String.valueOf(url)
if (!u.contains("#") || !u.contains("/-/")) {
try {
HttpURLConnection connection = (HttpURLConnection) url.openConnection()
connection.setRequestMethod("GET")
connection.setFollowRedirects(false)
connection.setDoOutput(true)
connection.setConnectTimeout(20000)
int statusCode
try {
statusCode = connection.getResponseCode()
}
catch (SSLHandshakeException sslHandshakeEx) {
KeywordUtil.markWarning("Unable to hit url: " + url + "due to SSLHandshakeException.")
}
Map<String, List<String>> responseHeadersMap = new HashMap<String, List<String>>()
if (statusCode != null) {
responseHeadersMap = connection.getHeaderFields()
}
String responseContentType
if (!responseHeadersMap.isEmpty() && responseHeadersMap.get("Content-Type") != null) {
responseContentType = responseHeadersMap.get("Content-Type")
}
else {
KeywordUtil.markWarning("Content-Type not found in response. Response headers:" + System.lineSeparator()
+ stringifyHeaders(responseHeadersMap))
}
if (statusCode >= 200 && statusCode < 400) {
if (responseContentType != null) {
KeywordUtil.logInfo(url.toString() + System.lineSeparator() + "status code: " + String.valueOf(statusCode) + ", content type: " + responseContentType)
}
else {
KeywordUtil.logInfo(url.toString() + System.lineSeparator() + "status code: " + String.valueOf(statusCode) + ", content type: not found")
}
}
else {
KeywordUtil.markWarning(url.toString() + ", status code: " + String.valueOf(statusCode))
}
ArrayList<String> result = new ArrayList<String>(Arrays.asList(url, statusCode, responseContentType))
results.add(result)
connection.disconnect()
}
catch (ConnectException | SocketTimeoutException connectionException) {
KeywordUtil.markWarning("Unable to hit url: " + url + " due to ConnectException.")
}
}
}
return results
}
@Keyword
def isValidUrl(String url) {
Boolean isValid = false
UrlValidator urlValidator = new UrlValidator()
isValid = urlValidator.isValid(url)
return isValid
}
@Keyword
def stringifyHeaders(Map<String, List<String>> map) {
ArrayList<String> adepts = new ArrayList<String>()
for (Map.Entry<String, List<String>> entry: map.entrySet()) {
String adept = entry.getKey() + ": " + entry.getValue()
adepts.add(adept)
}
return String.join(System.lineSeparator(), adepts)
}
@Keyword
def getLinkContentType(String link) {
URL url
ArrayList<String> toReturn = new ArrayList<String>()
if (isValidUrl(link)) {
url = new URL(link)
TrustManager[] trustAllCerts = trustAllCerts()
SSLContext sc = SSLContext.getInstance("SSL")
sc.init(null, trustAllCerts, new java.security.SecureRandom())
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory())
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true
}
}
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid)
HttpURLConnection connection = (HttpURLConnection) url.openConnection()
connection.setRequestMethod("GET")
connection.setFollowRedirects(false)
connection.setDoOutput(true)
connection.setConnectTimeout(120000)
int statusCode
try {
statusCode = connection.getResponseCode()
}
catch (SSLHandshakeException | ConnectException connectionError) {
KeywordUtil.markWarning("Unable to hit link " + url)
}
Map<String, List<String>> responseHeadersMap = new HashMap<String, List<String>>()
if (statusCode != null) {
responseHeadersMap = connection.getHeaderFields()
}
String responseContentType
if (!responseHeadersMap.isEmpty() && responseHeadersMap.get("Content-Type") != null) {
responseContentType = String.valueOf(responseHeadersMap.get("Content-Type"))
}
else {
KeywordUtil.markWarning("Content-Type not found in response. Response headers:" + System.lineSeparator()
+ stringifyHeaders(responseHeadersMap))
}
if (statusCode >= 200 && statusCode < 400) {
if (responseContentType != null) {
String ct = responseContentType.replace("[", "").replace("]", "")
List<String> cts = ct.split(";")
toReturn.addAll(cts)
}
}
connection.disconnect()
}
else {
KeywordUtil.markError("Collected invalid link: " + link)
}
return toReturn
}
}

最新更新