// Path: src/main/java/com/github/webdriverextensions/internal/utils/NumberUtils.java
// public class NumberUtils {
// 
//     private NumberUtils() {}
//     
//     public static String toString(double number) {
//         if (number == (int) number) {
//             return String.format("%d", (int) number);
//         } else {
//             return String.format("%s", number);
//         }
//     }
// }
// 
// Path: src/main/java/com/github/webdriverextensions/internal/utils/StringUtils.java
// public class StringUtils {
//     
//     private StringUtils() {}
// 
//     public static String appendNewLineIfContainsNewLine(String string) {
//         if (contains(string, "\n")) {
//             return "\n" + string;
//         }
//         return string;
//     }
// 
//     public static String surroundNewLinesIfContainsNewLine(String string) {
//         if (contains(string, "\n")) {
//             return "\n" + string + "\n";
//         }
//         return string;
//     }
// 
//     public static String prependSpaceIfNotBlank(String string) {
//         if (org.apache.commons.lang3.StringUtils.isNotBlank(string)) {
//             return " " + string;
//         }
//         return string;
//     }
// 
//     public static String quote(String text) {
//         return "\"" + text + "\"";
//     }
// 
//     public static String quote(double number) {
//         return "\"" + NumberUtils.toString(number) + "\"";
//     }
// 
//     public static String indent(String string, String indent) {
//         return string.replaceAll("\n", "\n" + indent);
//     }
// 
//     public static boolean isBlank(String string) {
//         return org.apache.commons.lang3.StringUtils.isBlank(string);
//     }
// }
// 
// Path: src/main/java/com/github/webdriverextensions/internal/BotUtils.java
// public static String htmlOf(WebElement webElement) {
//     if (webElement == null) {
//         return "Element is null";
//     }
//     String innerHtml = innerHtmlOf(webElement);
//     if (StringUtils.isBlank(innerHtml)) {
//         return "<" + Bot.tagNameOf(webElement) + prependSpaceIfNotBlank(attributesIn(webElement)) + " />";
//     }
//     return "<" + Bot.tagNameOf(webElement) + prependSpaceIfNotBlank(attributesIn(webElement)) + ">"
//             + surroundNewLinesIfContainsNewLine(innerHtml)
//             + "</" + Bot.tagNameOf(webElement) + ">";
// 
// }


import com.github.webdriverextensions.internal.utils.NumberUtils;
import com.github.webdriverextensions.internal.utils.StringUtils;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import static com.github.webdriverextensions.internal.BotUtils.htmlOf;
package com.github.webdriverextensions.exceptions;



public class WebAssertionError extends java.lang.AssertionError {

    private static final String INDENT = "    ";

    public WebAssertionError(WebElement webElement) {
        super(StringUtils.indent("\nElement:\n" + htmlOf(webElement), INDENT));
    }

    public WebAssertionError(String detailMessage, WebElement webElement) {
        super(detailMessage + getDebugInfo(webElement));
    }

    public WebAssertionError(String detailMessage, String name, String value) {
        super(detailMessage + StringUtils.indent("\n" + name + ": " + value, INDENT));
    }

    public WebAssertionError(String detailMessage, String name, double actual) {
        super(detailMessage + StringUtils.indent("\n" + name + ": " + NumberUtils.toString(actual), INDENT));
    }

    private static String getDebugInfo(WebElement webElement) {
        if (webElement == null) {
// Path: src/main/java/com/github/webdriverextensions/internal/utils/NumberUtils.java
// public class NumberUtils {
// 
//     private NumberUtils() {}
//     
//     public static String toString(double number) {
//         if (number == (int) number) {
//             return String.format("%d", (int) number);
//         } else {
//             return String.format("%s", number);
//         }
//     }
// }
// 
// Path: src/main/java/com/github/webdriverextensions/internal/utils/StringUtils.java
// public class StringUtils {
//     
//     private StringUtils() {}
// 
//     public static String appendNewLineIfContainsNewLine(String string) {
//         if (contains(string, "\n")) {
//             return "\n" + string;
//         }
//         return string;
//     }
// 
//     public static String surroundNewLinesIfContainsNewLine(String string) {
//         if (contains(string, "\n")) {
//             return "\n" + string + "\n";
//         }
//         return string;
//     }
// 
//     public static String prependSpaceIfNotBlank(String string) {
//         if (org.apache.commons.lang3.StringUtils.isNotBlank(string)) {
//             return " " + string;
//         }
//         return string;
//     }
// 
//     public static String quote(String text) {
//         return "\"" + text + "\"";
//     }
// 
//     public static String quote(double number) {
//         return "\"" + NumberUtils.toString(number) + "\"";
//     }
// 
//     public static String indent(String string, String indent) {
//         return string.replaceAll("\n", "\n" + indent);
//     }
// 
//     public static boolean isBlank(String string) {
//         return org.apache.commons.lang3.StringUtils.isBlank(string);
//     }
// }
// 
// Path: src/main/java/com/github/webdriverextensions/internal/BotUtils.java
// public static String htmlOf(WebElement webElement) {
//     if (webElement == null) {
//         return "Element is null";
//     }
//     String innerHtml = innerHtmlOf(webElement);
//     if (StringUtils.isBlank(innerHtml)) {
//         return "<" + Bot.tagNameOf(webElement) + prependSpaceIfNotBlank(attributesIn(webElement)) + " />";
//     }
//     return "<" + Bot.tagNameOf(webElement) + prependSpaceIfNotBlank(attributesIn(webElement)) + ">"
//             + surroundNewLinesIfContainsNewLine(innerHtml)
//             + "</" + Bot.tagNameOf(webElement) + ">";
// 
// }


// Path: src/main/java/com/github/webdriverextensions/exceptions/WebAssertionError.java
import com.github.webdriverextensions.internal.utils.NumberUtils;
import com.github.webdriverextensions.internal.utils.StringUtils;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import static com.github.webdriverextensions.internal.BotUtils.htmlOf;

package com.github.webdriverextensions.exceptions;



public class WebAssertionError extends java.lang.AssertionError {

    private static final String INDENT = "    ";

    public WebAssertionError(WebElement webElement) {
        super(StringUtils.indent("\nElement:\n" + htmlOf(webElement), INDENT));
    }

    public WebAssertionError(String detailMessage, WebElement webElement) {
        super(detailMessage + getDebugInfo(webElement));
    }

    public WebAssertionError(String detailMessage, String name, String value) {
        super(detailMessage + StringUtils.indent("\n" + name + ": " + value, INDENT));
    }

    public WebAssertionError(String detailMessage, String name, double actual) {
        super(detailMessage + StringUtils.indent("\n" + name + ": " + NumberUtils.toString(actual), INDENT));
    }

    private static String getDebugInfo(WebElement webElement) {
        if (webElement == null) {
            return "";