【问题标题】:How to check does element exist by tag?如何通过标签检查元素是否存在?
【发布时间】:2018-04-22 15:39:04
【问题描述】:

我在页面上有一个元素

<a data-cke-saved-name name></a>

我想检查页面上是否存在此元素? 我试过这种方式

WebElement link = null;
    try {
        link = Main.s_driver.findElement(By.tagName("data-cke-saved-name name"));
        System.out.println("OK");
    } catch (NoSuchElementException e) {
        System.out.println("Something went wrong");
    }

但它不起作用。有没有其他方法可以检查这个元素?

【问题讨论】:

  • “它不起作用”是什么意思?
  • 当元素在页面上时抛出 NoSuchElementException
  • 所以我猜这种方式搜索这个元素是不正确的。

标签: java selenium testing


【解决方案1】:

我曾经使用过一些时间对我有用

  if(driver.findElement(By.tagname("value"))!= null){
    System.out.println("OK");
    }else{
    System.out.println("Not there");
    }

Howerver try.. catch() 也应该可以检查现有元素,如果不存在则它会抛出异常

【讨论】:

  • 这是同样的方式,正确的,但不幸的是,不是我的方式。
【解决方案2】:

找到了答案。在这种情况下,我需要通过 By.xpath 指定标签为空

link = Main.s_driver.findElement(By.xpath("//a[contains(@data-cke-saved-name, '')]"));

【讨论】:

  • 你可以使用//a[@data-cke-saved-name]
【解决方案3】:

如果在检查元素存在后不需要使用该元素,请使用预期条件类。

bool exists = ExpectedConditions.presenceOfElementLocated(
                              By.CssSelector("[data-cke-saved-name='name']"));

如果在确定元素是否存在后确实需要使用该元素,那么您需要回退到使用 driver.findElement。我要么先检查它是否存在,要么写一个 webdriver 等待轮询,直到 driver.findElement 不抛出异常。

请记住,数据属性算作 CSS 选择器。所以你可以使用 CssSelector By 而不是较慢的 XPath By :)

【讨论】:

  • 嗯。有趣的。我会尝试这种方式。谢谢。
  • "exists" 变量获取 WebElement 类型,而不是布尔类型。
  • 看,确实如此。对于那个很抱歉。那么您可以将变量更改为 WebElement 而不是 bool。
  • 基本上你需要做的就是做一个 driver.findElement() 但如果元素不存在则捕获异常
  • A.现在我有了主意。是的,如果我不需要对象会更好。谢谢。
猜你喜欢
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2015-04-25
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
相关资源
最近更新 更多