如果它是WebElement,如何在if语句上循环?

时间:2015-07-06 10:10:01

标签: java selenium

我正试图操纵这些代码块:

List<WebElement> more = driver.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button"));
        if(more.size()!=0){
                driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button")).click();
        }else {
            WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
            List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));
            System.out.println("Total Number of TR: " + list.size());
        }

我希望做的是,在我执行IF语句中的内容之前,我希望每当它看到元素 / html / body / div [1] / div / div时循环它3] / div / div / div [1] / div / div [2] / div [2] / div / div [4] /按钮 它将被点击,如果它不可用然后生病了:

WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
            List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));
            System.out.println("Total Number of TR: " + list.size());
嗨,大家好,我想在这里做的更多信息是这个。 我在列表视图中查看特定模块,然后在按钮上有“单击此处获取更多记录” - &gt;它的XPath是/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button 我希望如果我在列表视图中并且如上所述存在该按钮 - 我想单击它。如果在列表视图中没有按钮“单击此处获取更多记录”(例如,记录仅由5个记录组成,因此没有明确的分页)我想执行代码块

1 个答案:

答案 0 :(得分:0)

我从您的查询中理解的是,您希望多次循环您的IF条件语句,直到您的其他条件满足为止。为此,您可以尝试以下代码:

     (1) try{
      (2)    String xpathVAL="/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/button";
         (3) int i=1;
       (4)   while(i!=0){

              (5)   if(driver.findElements(By.xpath(xpathVAL)).size() != 0)

             (6)    {
                (7)      driver.findElement(By.xpath(xpathVAL).click();
                (8)   Thread.sleep(2000);

               (9)  }

             (10)    else{
              (11)              Thread.sleep(2000);
              (12)         WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
    (13)    List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));
     (14)   LOGGER.debug("Total Number of TR: " + list.size());
        (15) i=0;
        (16)         }
      (17)    }
    (18)      }catch(Exception e){
        (19)  LOGGER.debug("Exception Caught");
(20) WebElement present = driver.findElement(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody"));
       List<WebElement> list = present.findElements(By.xpath("/html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[3]/div/table/tbody/tr"));

          }

我认为您的要求是一直按住按钮,直到出现某个窗口并且按钮消失。我建议的是,应用&#34; Thread.sleep(//大约3-4秒//)&#34;。然而,许多标准都没有提出编码风格很差并且使用强有力的线程。您可以在其中放置一些其他隐式等待。此外,如果在一段时间后未找到您的元素,您可以在特定时间间隔后应用中断条件,否则它将进入无限循环。如果您在编写代码时遇到问题,请告诉我,我会帮助您。

修改

尝试以下几点来删除缓存中不存在的元素: -

  1. 在第8行和第11行使用显式等待(Thread.sleep)
  2. 将xpath从位置更改为某些id / name / class类型。将其更改为 NAME 可以获得更清晰的元素图片,即使其位置已更改。
  3. 如果在第20行捕获到异常,则再次重新初始化该元素。