如何在运行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分钟。
答案 0 :(得分:1)
使用thread.sleep绝不是一个好主意,因为如果您使用像Testng / Junit这样的框架,它可能会导致奇怪的结果,因为webdriver方法通常不是线程安全的,我建议您使用“预期条件”的概念“.........
答案 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/