【问题标题】:How to throw custom exception instead of NoSuchElementException in selenium如何在 selenium 中抛出自定义异常而不是 NoSuchElementException
【发布时间】:2016-04-07 15:46:29
【问题描述】:

当找不到元素的 xpath 时,我希望在 selenium 中抛出自定义错误消息 我创建了一个类

package NewPackage;

public class ExplicitAssertionError extends AssertionError {
    private static final long serialVersionUID = 1L;
    public ExplicitAssertionError (String msg) {
        super(msg);
    }
}

我写过这样的代码来测试一个页面

public class ResultPage extends WDBase {
    public void assertTravelNamePresent(final String busName) {
        final String xpath="//div[@class='company'][contains(.,'"+busName+"')]";
        if (!driver.findElement(By.xpath(xpath)).isDisplayed()) {
                throw new ExplicitAssertionError("invalid text found");
        }
    }
}

在这里,当传递了与页面的 xpath 不匹配的无效文本时,将抛出 NoSuchElementException 而不是错误消息。 在找不到元素的情况下,任何人都可以为我提供使用 assertTrue/False 使测试用例失败的解决方案 谢谢

【问题讨论】:

    标签: java firefox xpath selenium-webdriver


    【解决方案1】:

    使用findElements()方法检查长度:

    if (driver.findElements(By.xpath(xpath)).size() == 0) {
        throw new ExplicitAssertionError("element not found");
    }
    

    【讨论】:

    • 您能解释一下 xpath 是如何测试 w.r.t size() 的吗?
    • @nikhiludgirkar 只是如果没有匹配 xpath 表达式的元素,size() 将返回 0。我认为这正是你想要做的,对吧?
    • 这对检查isDisplayed()有好处,isEnabled()怎么样
    【解决方案2】:

    您也可以使用以下方法:

    try{
        driver.findElement(By.xpath(xpath)).isDisplayed()
     }
    catch(Exception ex){
        throw new Exception("element not found");
     }
    

    【讨论】:

    • 虽然这种方法会打印一条错误消息,但即使未找到 xpath,测试也将始终通过。找不到 xpath 时,我需要测试失败
    • 如果你使用上面的代码测试将失败并提示你将通过异常
    • 我们可以不写 try..catch 而是写“throws”来完成这件事吗?
    • 如果你没有使用 try catch 应用 Alecxe 方法
    • 捕获所有Exceptions 从来都不是很聪明,而抛出新的确实会污染API,给方法的所有调用者造成负担。
    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    相关资源
    最近更新 更多