findelement 没有抛出 NoSuchElementException
findelement is not throwing NoSuchElementException
我想编写一个测试来检查页面上是否不存在具有指定文本的网络元素。这是完成这项工作的方法的代码:
public boolean checkOfAanvraagIsOpgevoerd (String titel)
{
String quote = "\"";
String titelMetQuotes = quote + titel +quote;
titelMetQuotes = "dierdieboeboe";
boolean isOpgevoerd=false;
try {
driver.findElement(By.xpath(".//*[@id='listRequests']//h4/a[contains(text(),"+titelMetQuotes+")]"));
isOpgevoerd=true;
} catch (NoSuchElementException NE) {
NE.printStackTrace();
}
return isOpgevoerd;
}
尽管我绝对确定页面上没有包含文本 "dierdieboeboe" 的标记,但仍会跳过 catch 块。当我在 xpath 表达式中替换 h5 中的 h4 时,会按预期抛出 NoSuchElementException。似乎忽略了表达式中的包含部分。
试试这个(注意实际文本周围的单引号):
By.xpath("//*[@id='listRequests']//h4/a[contains(text(),'"+titelMetQuotes+"')]")
contains 是一个接受两个字符串的函数。因此,需要引用变量 titelMetQuotes
的文本。显然,在这种情况下使用单引号更容易。
此外,变量名(带引号的标题)非常具有误导性,因为它实际上没有引号,这是代码中的另一个缺陷:
String titelMetQuotes = quote + titel +quote;
titelMetQuotes = "dierdieboeboe";
第二行简单地用非引号字符串覆盖了引号标题。
最后,您不需要 xpath 表达式中的前导点来定位 ID 为 listRequests
的任何类型的第一个元素
我想编写一个测试来检查页面上是否不存在具有指定文本的网络元素。这是完成这项工作的方法的代码:
public boolean checkOfAanvraagIsOpgevoerd (String titel)
{
String quote = "\"";
String titelMetQuotes = quote + titel +quote;
titelMetQuotes = "dierdieboeboe";
boolean isOpgevoerd=false;
try {
driver.findElement(By.xpath(".//*[@id='listRequests']//h4/a[contains(text(),"+titelMetQuotes+")]"));
isOpgevoerd=true;
} catch (NoSuchElementException NE) {
NE.printStackTrace();
}
return isOpgevoerd;
}
尽管我绝对确定页面上没有包含文本 "dierdieboeboe" 的标记,但仍会跳过 catch 块。当我在 xpath 表达式中替换 h5 中的 h4 时,会按预期抛出 NoSuchElementException。似乎忽略了表达式中的包含部分。
试试这个(注意实际文本周围的单引号):
By.xpath("//*[@id='listRequests']//h4/a[contains(text(),'"+titelMetQuotes+"')]")
contains 是一个接受两个字符串的函数。因此,需要引用变量 titelMetQuotes
的文本。显然,在这种情况下使用单引号更容易。
此外,变量名(带引号的标题)非常具有误导性,因为它实际上没有引号,这是代码中的另一个缺陷:
String titelMetQuotes = quote + titel +quote;
titelMetQuotes = "dierdieboeboe";
第二行简单地用非引号字符串覆盖了引号标题。
最后,您不需要 xpath 表达式中的前导点来定位 ID 为 listRequests