java - 如何处理 selenium Xpath 中的条件

标签 java selenium xpath

我正在 Web View 中的表格中搜索文本,如果文本不存在,它应该转到 else 并相应地执行我的操作,而不是这样,它会抛出 NoSuchElementException 异常。如何处理这个。当找不到用于比较的数据时,Web 驱动程序返回什么值。

注意:如果它在表中找到 title 变量的匹配值

WebElement table = driver.findElement(By.xpath("html/body/form/div[6]/div/div[1]/div[2]/fieldset/div[1]/div/div[1]/div/table"));

// find the row
WebElement customer = table.findElement(By.xpath("//tbody/tr/td[contains(text(), '"+title+"')]/following-sibling::td/a[text()='Detail']"));
if(customer != null){ // how do I compare here.
    //System.out.println("This is your TITLE " +customer.getText());
    }else{
// my further code for failed case. 
}

最佳答案

如果您尝试查找不存在的元素,则会抛出 NoSuchElementException。因此,使用 try/catch 机制来定义 else 情况:

WebElement table = driver.findElement(By.xpath("html/body/form/div[6]/div/div[1]/div[2]/fieldset/div[1]/div/div[1]/div/table"));
try {
    WebElement customer = table.findElement(By.xpath("//tbody/tr/td[contains(text(), '"+title+"')]/following-sibling::td/a[text()='Detail']"));
    System.out.println("This is your TITLE " +customer.getText()); 
}
catch(NoSuchElementException e) {
    // code for failed case
}

或者,您可以检查元素是否存在,然后应用常规 if/else:

WebElement table = driver.findElement(By.xpath("html/body/form/div[6]/div/div[1]/div[2]/fieldset/div[1]/div/div[1]/div/table"));
int amount = table.findElements(By.xpath("//tbody/tr/td[contains(text(), '"+title+"')]/following-sibling::td/a[text()='Detail']")).size();
if(amount > 0)
    // element exists
else
    // element doesn't exist

关于java - 如何处理 selenium Xpath 中的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49006574/

相关文章:

xml - 具有默认命名空间的 XML 文件上的 XSLT。带有 'artificial' 前缀的 Xpath

java - Jasypt - 如何使用 StrongPasswordEncryptor 作为 .properties 文件中的凭据

java - 如何在 Tomcat 6 中配置永久 Servlet?

python selenium - 元素当前不可交互,可能无法操作

ruby - 使用 ruby​​ 1.9.2、selenium-client 和 rspec(无rails)进行独立测试

java - Cucumber spring WebDriver 在 @After 方法中退出的设计问题

java - 如何使用 XPath 通过另一个属性的值过滤元素?

php - 如何使用php从HTML表格中提取数据

java - J8583:ISO8583 MessageFactory 没有消息类型 0800 的解析指南

java - spring.session.timeout 与 server.servlet.session.timeout