【问题标题】:Java else if statement within selenium webdriver- negative testselenium webdriver中的Java else if语句-否定测试
【发布时间】:2018-10-10 22:49:52
【问题描述】:

所以我正在测试将一个项目添加到购物车,但实际上我想选择第一个项目(如果存在),否则如果选择第二个项目,但 https://www.prana.com/men/tops/shirts.html 上没有这些项目的列表。所以我为每个图像选择了 CSS 选择器。为了仍然能够拥有多个项目,我想使用 if-else if 语句在项目之间做出决定。我有:

if (driver.findElement(By.cssSelector("a[title='Weathered Blu22e']")).isDisplayed())
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}
else if (driver.findElement(By.cssSelector("a[title='Equinox Blue']")).isDisplayed ) 
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}

具有“Blu22e”的第一行不是正确的 CSS 标题,但 Blue 是...当我有“blue”时,它会正确选择项目,但是当我放入 Blu22e(进行否定测试并转到else if 语句我看到这个错误:

no such element: unable to locate such an element.

有什么想法可以对第一行进行否定测试吗?我希望它跳过它并继续下一个语句 抱歉,我是实习生,还在上学,所以我的 Java 没有达到标准。

【问题讨论】:

  • 您为什么要使用 isDisplayed() 验证 cssSelector("a[title='Weathered Blu22e']") 而在 cssSelector("a[title='Weathered Blue']") 上调用 click() ?是不是打错字了?
  • @DebanjanB 可能是一个错字我不想验证weathe Blu22e。我想测试一下Blu22e有没有风化? (不,因为它是一个假名)所以转到 Else if 语句
  • 我的回答也是基于同样的逻辑。你能试试看,让我知道状态吗?

标签: java selenium if-statement selenium-webdriver try-catch


【解决方案1】:

据我了解,您希望单击元素 cssSelector("a[title=''Weathered Blu22e'']"),如果它在 HTML DOM 中不可用,您希望单击元素 cssSelector("a[title='Weathered Blue']")

在这种情况下,您需要将逻辑包装在 try-catch{} 块中,如下所示:

try {
    driver.findElement(By.cssSelector("a[title='Weathered Blu22e']")).click();
} catch (NoSuchElementException e) {
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}

【讨论】:

  • 抱歉,我的措辞可能有误我试图绕过 Weathered Blu22e 并选择 Equinox blue。我希望它使第一个 if 语句失败并移至下一个 Else if 语句。
  • @Thatbrazilian 答案基于相同的逻辑来寻找Weathered Blu22e 这是fake,在这种情况下你会看到一个NoSuchElementException 这将由 catch() 块处理,仅在 Weathered Blue 上由 click() 处理,这是您的其他选择。
  • 非常感谢!!这行得通!我的后续行动是我可以继续为每一个产品添加捕获吗?
  • @Thatbrazilian 每当出现决策案例时,例如a) 要么这样做 b) 要么那样做,诱导try-catch{} 处理异常,否则由于异常,您将无法继续。如果这回答了您的问题,请告诉我。
  • 确实如此!非常感谢,如果我现在可以投票支持所有内容的话.. 但我太新了,它不会让我.. 你是救命稻草!
【解决方案2】:

如果您在 javadocs 中查找 WebDriver,您会看到: findElement 不应该用于查找不存在的元素,而是使用 findElements(By) 断言零长度响应。所以它可能是这样的:

if (driver.findElements(By.cssSelector("a[title='Weathered Blu22e']")).size() > 0)
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}
else if (driver.findElements(By.cssSelector("a[title='Equinox Blue']")).size() > 0) 
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}

【讨论】:

  • 当我尝试这个时,它说方法大小未定义为 web 元素。我需要为 Css 设置一个元素吗?
  • 我测试过,效果很好。在我看来,您将调用方法 size() 到 List 的 WebElement:您的变体是 driver.findElement(By...).size() 而不是 driver.findElements(By...).size( )
猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 2023-03-28
  • 1970-01-01
  • 2014-10-29
相关资源
最近更新 更多