运行 selenium 脚本时如何等待结果显示在 for 循环中?

How to wait for the results to get displayed within a for loop while running selenium script?

如何在 运行 selenium 脚本中等待结果在 for 循环中显示?

我使用了以下代码:

 for (k = 1; k < s2.getRows(); k++)
 {
  //redeem flow
  d1.findElementByXPath("html/body/div[2]/div/div/div/div[2]/ul/li[3]/a").click();
  d1.findElementByXPath("html/body/div[2]/div/div/div/div[2]/ul/li[3]/ul/li[2]/a").click();
  d1.findElement(By.xpath("html/body/div[3]/div[2]/form/div[1]/div[2]/input")).sendKeys(s2.getCell(0, k).getContents());

  //pause for list to be populated
  try 
  {
   Thread.sleep(1000L);
  }
  catch (Exception e)
  {
  }

  // Get all items in autocomplete list
  List<WebElement> items1 = d1.findElements(By.xpath("html/body/ul/li[3]/a"));

  // Look for item 
  for( i= 0; i <items1.size();i++)
  {
   if(items1.get(i).getText().contains(s2.getCell(0, k).getContents()))
   {
    items1.get(i).click();
    break; 
   }
  }  

  //calendar handling
  d1.findElementById("checkin").click();
  d1.findElementByXPath("html/body/div[8]/div[2]/div/a/span").click();
  d1.findElementByXPath("html/body/div[8]/div[2]/table/tbody/tr[3]/td[3]/a").click();

  //Select Room Type
  d1.findElementById("roomtype").sendKeys("Single");

  //Occupant's Nationality  
  d1.findElementById("nationality").sendKeys("India");

  //Click search button
  d1.findElementByXPath("html/body/div[3]/div[2]/form/div[5]/input").click();

  //after 2 min wait                 
  d1.manage().timeouts().implicitlyWait(2, TimeUnit.MINUTES);
 } 

d1.manage().timeouts().implicitlyWait(2, TimeUnit.MINUTES); 此声明不能确保等待 2 分钟,这是我的要求。

如果您不等待特定条件,您可以使用 Thread

Thread.sleep(1000)

这是以毫秒为单位,因此它将等待 1 秒。

否则使用

WebDriverWait.until(找到元素的条件)

您可以在此处找到有关隐式和显式等待的文档:

http://www.bizalgo.com/2012/01/14/timing-races-selenium-2-implicit-waits-explicit-waits/

使用 thread.sleep 永远不是一个好主意,因为如果您使用像 Testng/Junit 这样的框架,它可能会导致奇怪的结果,因为 webdriver 方法大多不是线程安全的,我建议您使用"Expected Conditions"的概念.........

API 下面的文档 https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html

您可以使用下面的webdriver等来解决这个问题。 WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(元素)); wait.until(ExpectedConditions.elementToBeClickable(元素)); wait.until(ExpectedConditions.presenceOfElementLocated(元素))