您的位置:首页 > 理论基础 > 计算机网络

selenium 对于网络延时怎么处理?

2016-05-31 09:40 477 查看

在自动化测试或网络爬虫运行时,经常会用到网络状况不好的情况,那么之前写的代码就经常会出现异常,比如 NoSuchElementException或者 TimoutException 之类的。如下错误代码在网络不佳的情况下就会报错:

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.WebElement;

public class NewTest{
public static void main(String[] args) throws InterruptedException {
System.setProperty ( "webdriver.chrome.driver" ,
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
WebDriver driver = new ChromeDriver();
try{
driver.get("http://shanghai.anjuke.com");
WebElement input=driver.findElement(By.xpath("//input[@id='glb_search0']"));
input.sendKeys("selenium");

}catch(Exception e){
e.printStackTrace();
}finally{

driver.quit();
}
}

 

 如果用 WebDriverWait这个类即可对代码进行可控。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedCondition;

public class NewTest{
public static void main(String[] args) throws InterruptedException {
System.setProperty ( "webdriver.chrome.driver" ,
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );
WebDriver driver = new ChromeDriver();
try{
//设置页面加载超时时间为3S
driver.manage().timeouts().pageLoadTimeout(3, TimeUnit.SECONDS);
driver.get("http://shanghai.anjuke.com");
}catch(Exception e){
//3秒后抛出异常,但程序会继续向下处理,页面也会继续加载
}finally{

//最多等待10S,每2S检查一次
WebDriverWait wait=new WebDriverWait(driver,10,2000);

wait.until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
System.out.println("sleep");
return !(driver.findElements(By.xpath("//div[@id='city-panel']")).size() > 0);
}
});

driver.quit();
}

}

 如果 你觉得这段代码不好用,也可以自己写。如下:

//每2S 检查一次,但无休止地检查,直到页面加载完成为止
while(true){
if( !(driver.findElements(By.xpath("//div[@id='city-panel']")).size() > 0)) {
Thread.sleep(2000);
}else {
break;
}
}

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: