Selenium WebDriver if else声明

时间:2016-03-24 12:49:35

标签: java selenium webdriver

第一次发布海报,长时间用户收获所有这些重大问题的好处。但我需要你的帮助。

我在下面尝试做的是

  1. 导航到页面
  2. 查找所有特定链接
  3. 点击第一个链接
  4. 检查元素是否显示,如果显示,则导航回上一页并单击列表的下一个链接。如果未显示,则退出方法并继续测试脚本。这是我被卡住的部分。
  5. if语句按需要执行,如果找到该元素,则它会导航回到前一个元素。但它失败的地方是点击页面的第二个链接。它会搜索该元素,即使该元素在该页面中不存在,并且即使我已明确声明返回,也不会退出该方法。

    我有一个大脑放屁,并尝试了我能想到的所有可能的组合和修饰。如果有人可以帮助我,我会非常感谢你的帮助。

    修改

    让我编辑以澄清我的想法。一旦inactive.isDisplayed()返回false,我需要我的方法退出方法。但是当它导航到第二页时,它会不断尝试找到该元素,然后最终以NoSuchElementException失败。我知道元素不存在,这就是为什么我需要它退出方法并执行测试脚本的下一步。我希望这能澄清我的情况。它不是真正的Selenium WebDriver问题,因为它是一个java问题。

    由于

    public void checkErrors() {
        List<WebElement> videos =driver.findElements(By.cssSelector(".row-
        title"));
        for (int i = 0; i < videos.size(); i++) {
            videos = driver.findElements(By.cssSelector(".row-title"));
            videos.get(i).click();
            if (inactive().isDisplayed() != false) {
                driver.navigate().back();
            } else {
                return;
            }
        }
        return;
    }
    

    修改

    private WebElement inactive() {
        inactive = 
        driver.findElement(By.cssSelector("#message>p>strong"));
        highlightElement(inactive);
        return inactive;
    }
    

2 个答案:

答案 0 :(得分:1)

在检查是否显示消息之前,您可能需要检查消息是否存在:

public void checkErrors() {
    for(int i = 0; ; i++) {
        // handle next link
        List<WebElement> videos = driver.findElements(By.cssSelector(".row-title"));
        if (i >= videos.size())
            return;

        // click the next link
        WebElement video = videos.get(i);
        video.click();

        // return if the message is missing or hidden
        List<WebElement> messages = driver.findElements(By.cssSelector("#message>p>strong"));
        if (messages.size() == 0 || !messages.get(0).isDisplayed())
            return;

        driver.navigate().back();
    }
}

答案 1 :(得分:0)

小建议在这里帮助您:

由于您在检查了它是否显示后未使用inactive()返回的WebElement,因此您可以移动逻辑以检查其是否显示为inactive()并返回isDisplayed()的值。例如:

private boolean inactive() {
   try {
      inactive = driver.findElement(By.cssSelector("#message>p>strong"));
      highlightElement(inactive);
      return inactive.isDisplayed(); // Element is present in the DOM but may not visible due to CSS etc.
   } catch (NoSuchElementException e) {
      return false; // Element is not present in the DOM, therefore can't be visible.
   }
}