Selenium WebDriver Java - 如何执行“如果存在,则单击,否则跳过”?

Posted

技术标签:

【中文标题】Selenium WebDriver Java - 如何执行“如果存在,则单击,否则跳过”?【英文标题】:Selenium WebDriver Java - how to perform "if exists, then click, else skip"? 【发布时间】:2018-09-18 17:47:47 【问题描述】:

在我的页面上,我有时会显示警报。 (这些实际上是 Salesforce 中的通知)这些警报会破坏我的脚本,因为我的脚本无法找到警报背后的元素。我想检查警报,如果存在,请忽略它们。如果它们不存在,则继续下一步。

第二个问题是这些警报可能不止一个。因此,它可能会消除 1 到 6 个或更多警报。

我已将此代码添加到我的测试脚本中,如果有一个警报,它就可以工作。显然,如果有多个警报或警报为零,我的脚本就会失败。

driver.findElement(By.xpath("//button[contains(@title,'Dismiss notification')]")).click();

我还在学习java,所以请温柔。 ;) 但是我很想把它放到一个方法中,这样它就可以查找那些按钮,如果它们存在,请单击它们,继续寻找更多,直到找不到,然后继续。我只是不知道该怎么做。

我也在使用 TestNG,我知道允许和不允许的情况有所不同。

谢谢!

【问题讨论】:

【参考方案1】:

您可以使用等待和 try/catch 来获取所有按钮并单击每个按钮(如果存在)。

1.如果警报全部同时出现,请使用以下代码:

try
      new WebDriverWait(driver, 5)
              .ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
              .until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.cssSelector("button[title*='Dismiss notification']"))))
      .forEach(WebElement::click);
 catch (Exception ignored) 

2.如果单独出现警报,请使用以下代码:

try
    while(true) 
        new WebDriverWait(driver, 5)
                .ignoring(ElementNotVisibleException.class, NoSuchElementException.class)
                .until(ExpectedConditions.visibilityOf(driver.findElement(By.cssSelector("button[title*='Dismiss notification']"))))
                .click();
    
 catch (Exception ignored) 

【讨论】:

非常感谢!那行得通!天哪,我整天都在忙着解决这个问题,然后才崩溃并寻求帮助。我应该只是问。再次感谢!【参考方案2】:

使用findElements,如果元素不存在,它将返回一个 0 的列表。

例如:

List<WebElement> x = driver.findElements(By.xpath("//button[contains(@title,'Dismiss notification')]"));

if (x.size() > 0)

    x.get(0).click();

// else element is not found.

【讨论】:

为什么要查询两次?只需x.get(0).click() 非常感谢!那也奏效了!这两种方法都有效(上面还有其他人发布的方法),所以我将保留它们以供参考。再次感谢!【参考方案3】:

findElements 将返回列表,无需再次创建。 x.size() 也不起作用,因为列表对象没有属性大小,所以我们必须检查长度。无需使用x.get(0).click();

driver.click(By.xpath("//button[contains(@title,'Dismiss notification')]")) 应该可以工作。

x = driver.findElements(By.xpath("//button[contains(@title,'Dismiss notification')]"));

if (len(x) > 0) 
  x.click();

【讨论】:

以上是关于Selenium WebDriver Java - 如何执行“如果存在,则单击,否则跳过”?的主要内容,如果未能解决你的问题,请参考以下文章

[Selenium+Java] Verify Tooltip Using Selenium WebDriver

零基础Selenium:Webdriver图文入门教程java篇(附相关包下载)

如何使用 Java 在 selenium webdriver 中打开新选项卡,或者如何使用 selenium webdriver 使用动作类在 selenium 中按 ctrl + T [重复]

java+selenium webdriver怎么实现数据参数化

无法使用Selenium和Java 11导入org.openqa.selenium.WebDriver

[Selenium+Java] Listeners and their use in Selenium WebDriver