gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:14:36 25 4
gpt4 key购买 nike

我正在尝试操纵这些代码块:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com