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

时间:2015-04-08 10:51:11

标签: java selenium selenium-webdriver

如何在运行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分钟。

3 个答案:

答案 0 :(得分:1)

使用thread.sleep绝不是一个好主意,因为如果您使用像Testng / Junit这样的框架,它可能会导致奇怪的结果,因为webdriver方法通常不是线程安全的,我建议您使用“预期条件”的概念“.........

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

如果您不等待特定条件,则可以使用线程

Thread.sleep(1000)

这是几毫秒,所以它将等待1秒钟。

否则使用

WebDriverWait.until(条件 - 即-发现最元件)

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

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