gpt4 book ai didi

java - 如果从 DOM 中删除元素,显式等待会花费更多时间

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

我正在自动化this website 但面临 ExplicitWaitConditions 管理时间的问题。

场景是当我在发送用户名后单击登录链接或提交按钮时,它会在过程中显示一个加载程序,一旦过程完成,加载程序就会从 DOM 中删除。

我已经使用了 invisibilityOfElementLocated 的条件,如下所示

new WebDriverWait(driver, 60).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading-bar")));

但这无法预测正确的时间,它需要更多时间(不完全是 60 秒,而是大约 15-20 秒或可能是 30 秒),然后允许执行下一个命令。

同一行我必须放在 4 个命令之前才能完成完整的登录过程。所以登录似乎花费了大约 90 秒。

如果我不使用Explicitwait或删除Impliciwait等待,则脚本始终失败,因为加载程序获得点击而不是其他元素。

到目前为止我尝试过的代码:

WebDriver driver = new FirefoxDriver();

System.out.println("Browser Opened");
driver.manage().window().maximize();
driver.get("https://www.rcontacts.in");
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
System.out.println("URL Opened");
new WebDriverWait(driver, 60).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading-bar")));
driver.findElement(By.cssSelector(".ng-scope>a span[translate='login.register']")).click();
System.out.println("Register Link Clicked");
driver.findElement(By.name("userId")).sendKeys("9422307801");
new WebDriverWait(driver, 60).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading-bar")));
driver.findElement(By.xpath("//button[@type='submit']")).click();
System.out.println("Mobile number entered");
new WebDriverWait(driver, 60).until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading-bar")));

是否有任何解决方案,一旦加载程序被删除,它就开始执行操作?

或者有什么方法可以让我等到加载器元素从 DOM 中删除。一旦删除,我就可以继续进一步的操作?。

最佳答案

根据the docs ,

WARNING: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times.

这可能是导致您出现问题的原因。建议不要使用隐式等待。我会删除它们,然后根据需要添加显式等待,看看效果如何。

我拿走了你的代码并重写了它(如下),它每次都对我有用。

String url = "https://www.rcontacts.in";
driver.navigate().to(url);
waitForLoader();
driver.findElement(By.cssSelector("span[translate='login.register']")).click();
waitForLoader();
driver.findElement(By.cssSelector("input[name='userId']")).sendKeys("9422307801");
driver.findElement(By.cssSelector("button[translate='common.btns.next']")).click();

我有时遇到的问题是脚本很多时候都在向前跳跃。我向 waitForLoader() 添加了代码,以等待加载程序出现(可见)然后消失(不可见)。一旦我这样做了,它就 100% 有效。

public static void waitForLoader()
{
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.id("loading-bar")));
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("loading-bar")));
}

关于java - 如果从 DOM 中删除元素,显式等待会花费更多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46152208/

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