java - 如果它是 WebElement,如何循环 if 语句?

标签 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]/button 会被点击,如果不可用然后我会执行这个:

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());

有关更多信息,我在这里尝试做的是这个。 我在特定模块的 ListView 上,然后在按钮处有一个“单击此处获取更多记录”->其 XPath 是 /html/body/div[1]/div/div[3]/div/div/div[1]/div/div[2]/div[2]/div/div[4]/按钮 我希望如果我在 ListView 中并且该按钮如上所述存在 - 我想单击它。如果 ListView 中没有“单击此处查看更多记录”按钮(例如记录仅由 5 条记录组成,因此没有清晰的分页),我想执行一段代码。

最佳答案

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

     (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"));

          }

我认为您的要求是不断单击按钮,直到出现某个窗口并且按钮消失。我对此的建议是,应用“Thread.sleep(//some 3-4秒//)”。然而,这种编码风格很差,并且许多标准不建议使用强制线程。您可以在那里放置一些其他隐式等待。另外,如果在一定时间后没有找到您的元素,您可以在一定时间间隔后应用中断条件,否则它将进入无限循环。如果您在编写代码时遇到困难,请告诉我,我会帮助您。

编辑

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

  1. 在第 8 行和第 11 行使用显式 wait(Thread.sleep)
  2. 将您的 xpath 从基于位置的更改为某些 id/name/class 类型。将其更改为基于 NAME 可以更清晰地了解元素,即使其位置发生变化。
  3. 如果在第 20 行捕获到异常,则再次重新初始化元素。

关于java - 如果它是 WebElement,如何循环 if 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243104/

相关文章:

Python Selenium Chrome 禁用提示 "Trying to download multiple files"

selenium - wait.until(ExpectedConditions) 在 selenium 中不再起作用

java - 使用 XPATH 选择与关键字匹配的行

Java:线程顺序

java - 如何使用 Java 小程序获取绝对文件路径

java - 实现其中包含其他通用定义的原始接口(interface)

selenium - 如何查找表中的第N个元素?

java - H2 序列在列中生成负数 [JPA Spring]

java - 为什么我的 JLabel 不能在循环中正确更新?

python - Selenium Chrome 驱动程序无法在 Pi Zero 上运行,错误代码为 -4