gpt4 book ai didi

java - 如何等待基于 API 调用出现和消失的页面加载器消失,然后再对元素执行操作

转载 作者:行者123 更新时间:2023-12-02 11:18:23 25 4
gpt4 key购买 nike

正如标题所述,我正在尝试对元素执行操作(即发送键或单击等),但加载程序(具有 ID)使操作不一致。

我已经尝试了相当多不同的方法,现在我采用了一种使用线程 sleep 的花哨方法,该方法半一致地工作,但仍然偶尔会出现误报,从而导致测试失败。

加载程序(id =“spinner”)在 API 调用完成后从页面消失(向脚本发送信号表明可以继续前进),但在下一次调用开始时,加载程序返回,然后在(当前)3 个 API 调用完成后消失。我想设计一种方法来使其工作,无论实现了多少次调用。

public void Loader()
{
WebDriverWait wait=new WebDriverWait(driver,50);
WebElement CPloader = driver.findElement(By.id("spinner"));
boolean test = wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));

if(test==false) {
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));
wait.until(ExpectedConditions.invisibilityOf(CPloader));
threadsleep(2000);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));
wait.until(ExpectedConditions.invisibilityOf(CPloader));
threadsleep(2000);
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("spinner")));
wait.until(ExpectedConditions.invisibilityOf(CPloader));
}

}

在测试脚本代码中,我通常会放置 loader 方法、threadsleep、loader 方法,试图让它延迟足够长的时间,但我知道这是不正确的...示例如下:

Util.Loader();
Util.threadsleep(2000);
Util.Loader();
//click element or send keys etc

我想象这是一个带有隐形等待的循环,但似乎无法弄清楚。

任何指向正确方向的指针都会有很大帮助。

最佳答案

我会通过等待加载程序出现然后消失来解决这个问题......并循环执行此操作。一旦加载程序停止出现,等待就会抛出TimeoutException。使用 try-catch 捕获它并跳出循环。您可能需要根据加载旋转器之间通常耗时来调整 10 秒的等待时间。

public static void Loader()
{
By loader = By.id("spinner");
WebDriverWait wait = new WebDriverWait(driver, 10);
while (true)
{
try
{
wait.until(ExpectedConditions.visibilityOfElementLocated(loader));
wait.until(ExpectedConditions.invisibilityOfElementLocated(loader));
}
catch (Exception e)
{
break;
}
}
}

关于java - 如何等待基于 API 调用出现和消失的页面加载器消失,然后再对元素执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50106997/

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