Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SeleniumWebDriver if-else语句_Java_Selenium_Webdriver - Fatal编程技术网

Java SeleniumWebDriver if-else语句

Java SeleniumWebDriver if-else语句,java,selenium,webdriver,Java,Selenium,Webdriver,第一次张贴海报,长期用户从所有这些伟大的问题中获益。但我需要你的帮助 下面我想做的是 导航到一个页面 找到所有特定的链接 点击第一个链接 检查元素是否显示,如果显示,则导航回上一页并单击列表的下一个链接。如果未显示,则退出该方法并继续测试脚本。这就是我被卡住的地方 if语句根据需要执行,如果它找到元素,那么它将导航回上一个元素。但它失败的地方是当它点击页面的第二个链接时。它搜索该元素,即使该元素在该页面中不存在,也不会退出该方法,即使我已显式声明了return 我脑子里出了个屁,尝试了我能想到的

第一次张贴海报,长期用户从所有这些伟大的问题中获益。但我需要你的帮助

下面我想做的是

  • 导航到一个页面
  • 找到所有特定的链接
  • 点击第一个链接
  • 检查元素是否显示,如果显示,则导航回上一页并单击列表的下一个链接。如果未显示,则退出该方法并继续测试脚本。这就是我被卡住的地方 if语句根据需要执行,如果它找到元素,那么它将导航回上一个元素。但它失败的地方是当它点击页面的第二个链接时。它搜索该元素,即使该元素在该页面中不存在,也不会退出该方法,即使我已显式声明了return

    我脑子里出了个屁,尝试了我能想到的所有可能的组合和置换。如果有人能帮助我,我将非常感谢你的帮助

    编辑

    让我编辑一下以澄清我的想法。我需要我的方法在不活动时退出该方法。isDisplayed()返回false。但是,当它导航到第二个页面时,它会不断尝试查找元素,然后最终失败,出现NosTouchElementException。我知道元素不存在,这就是为什么我需要它退出方法并执行测试脚本的下一步。我希望这能澄清我的情况。这不是一个真正的SeleniumWebDriver问题,因为它是一个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;
    }
    

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

    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();
        }
    }
    
    public void checkErrors(){
    对于(int i=0;i++){
    //处理下一个链接
    列表视频=driver.findElements(By.cssSelector(“.row title”);
    如果(i>=videos.size())
    返回;
    //单击下一个链接
    WebElement video=videos.get(i);
    video.click();
    //如果消息丢失或隐藏,则返回
    List messages=driver.findElements(By.cssSelector(“#message>p>strong”);
    if(messages.size()==0 | |!messages.get(0).isDisplayed())
    返回;
    driver.navigate().back();
    }
    }
    
    这里有一些小建议可以帮助您:

    由于您在检查是否显示后没有使用由
    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.
       }
    }
    

    嗨,萨米,你能分享
    inactive()
    方法的代码吗?嗨,汤姆,我用inactive方法编辑了我的文章。尽管它工作得很好。基本上,我的java逻辑需要一些修正。所谓不退出,你是指的
    不断循环,或者你有错误?嗨,伙计,我编辑了我的帖子,以澄清我的想法,所以我也将其发布在这里:让我编辑以澄清我的想法。我需要我的方法在不活动时退出该方法。isDisplayed()返回false。但是,当它导航到第二个页面时,它会不断尝试查找元素,然后最终失败,出现NosTouchElementException。我知道元素不存在,这就是为什么我需要它退出方法并执行测试脚本的下一步。我希望这能澄清我的情况。这不是一个真正的SeleniumWebDriver问题,因为它是一个java问题。谢谢你在
    inactive
    方法中尝试捕获
    NoTouchElement
    异常了吗?嗨,Florent,这成功了!非常感谢你的帮助!我非常感激:)嗨,汤姆,你的解决方案也奏效了!虽然我不能使视频为空,否则我将无法点击视频。我知道我的问题还不够清楚,但谢谢你的帮助,我非常感谢。Doh忘记了for循环中使用了视频列表的大小!
    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.
       }
    }