我正在使这个网站自动化,但面临ExplicitWait
管理时间的条件问题。
场景是当我在发送用户名后单击登录链接或提交按钮时,它会在此过程中显示一个加载程序,一旦进程完成,加载程序就会从 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 中删除。删除后,我可以继续进行进一步的操作吗?