运行 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"的概念.........
您可以使用下面的webdriver等来解决这个问题。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(元素));
wait.until(ExpectedConditions.elementToBeClickable(元素));
wait.until(ExpectedConditions.presenceOfElementLocated(元素))
如何在 运行 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"的概念.........
您可以使用下面的webdriver等来解决这个问题。 WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(元素)); wait.until(ExpectedConditions.elementToBeClickable(元素)); wait.until(ExpectedConditions.presenceOfElementLocated(元素))