资讯详情

模拟浏览器自动化测试工具Selenium之三页面窗口切换开发篇

不同的网站有不同的特点,需要掌握selenim本文分析了网页的基本元素定位和浏览器控制:

1)模拟鼠标操作,点击按钮提交;2)获取浏览器窗口句柄,切换到当前窗口;3)处理列表页面,设计两个变量iDyn和iSta并定位下一页进行翻译;4)处理弹出框alert;5)通过支持不同网页模板的信息收集元素定位,然后在元素下收集子元素;6)网页table处理元素。具体代码如下:

package com.test;  import java.util.List; import java.util.Set; import java.util.regex.Pattern;  import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.NoAlertPresentException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait;  import com.util.Logs;  public class Shop114YP {  public static void main(String[] args) {   System.getProperties().setProperty("webdriver.chrome.driver","D:\\dev\\workspace\\ocweb\\libs\\chromedriver.exe");    WebDriver webDriver = new ChromeDriver();   WebDriver wd = new ChromeDriver();   int iCount=0.//统计输出多少   try {    webDriver.get("url");///访问网站    //等待页面加载,直到满足条件            (new WebDriverWait(webDriver, 30)).until(new ExpectedCondition<Boolean>() {                public Boolean apply(WebDriver dr) {                    int index = dr.getPageSource().indexOf("keyword");                    if(index != -1){                                                 return true;  //找到,退出等待                  }else{                        return false;  ///找不到,继续等待                  }                }            });          //通过 id 找到 input的 DOM          Actions action=new Actions(webDriver); ///模拟鼠标操作          WebElement eleKeyword = webDriver.findElement(By.name("keyword"));          action.sendKeys(eleKeyword,"内容").perform();          ///          Set<String> bHandlers = webDriver.getWindowHandles();          String bHandler = bHandlers.iterator().next();          //执行点击操作,打开新页面          WebElement eleSearch = webDriver.findElement(By.className("search_shu4"));           action.moveToElement(eleSearch);            action.click().perform(); ///打开新页面          ///          Set<String> nHandlers = webDriver.getWindowHandles();          nHandlers.remove(bHandler);//移除先前页面          String nHandler = nHandlers.iterator().next()//获得最新打开的句柄          webDriver.switchTo().window(nHandler);////切换到新打开的页面          //webDriver.switchTo().window(bHandler);//回到原页面          (new WebDriverWait(webDriver, 30)).until(new ExpectedCondition<Boolean>() {                public Boolean apply(WebDriver dr) {                    int index = dr.getPageSource().indexOf("内容");                    if(index != -1) return true;  //找到,退出等待                  else return false;  ///未找到,继续等待                            }            });          //进入搜索结果页面,第一页          int iDyn=1;          int iSta=1;                while(iSta==iDyn){           List<WebElement> comList =webDriver.findElements(By.partialLinkText("内容"));           for(WebElement ele:comList){///处理每一项            iCount  ;            String com=ele.getText()//公司名称            String link=ele.getAttribute("href");             //if(!link.contains("shopid")) continue;//不包含shopid的链接不要            wd.get(link);                     try{             Alert alert = wd.switchTo().alert()js弹出框             if (null == alert){//没有弹出                    throw new NoAlertPresentException();                }else {                 alert.accept();                 continue;                }            }catch (NoAlertPresentException e) {                //System.out.println("There is no alert appear!");            }             ///支持不同网页模板的信息收集            if(wd.getPageSource().contains("lianxi-text")){             ///打开页面             List<WebElement> contactList =wd.findElements(By.id("lianxi-text"));             for(WebElement eleCon:contactList){              String txt=eleCon.getText();              com=com "|" txt;             }                     }else if(wd.getPageSource().contains("tablebg")){//网页table处理             WebElement table = wd.findElement(By.className("tablebg")); //获取table元素             List<WebElement> rows = table.findElements(By.tagName("tr"));//获取table内行元素             //List<WebElement> cells=rows.get(0).findElements(By.tagName("td"));//获取row第一行的所有列             for(WebElement row:rows) com=com "|" row.getText();            }else if(wd.getPageSource().contains("table2")){             List<WebElement> cells = wd.findElements(By.tagName("td"));//获取td元素             for(WebElement cell:cells){              if(cell.getAttribute("class").equals("table2") || cell.getAttribute("class").equals("table") ){               com=com "|" cell.getText();              }             }            }else if(wd.getPageSource().contains("sidenei")){             WebElement elesn=wd.finElement(By.className("sidenei"));
	        			List<WebElement> eleNeis = elesn.findElements(By.className("nei"));//class等于nei的元素
	        			for(WebElement elenei:eleNeis) com=com+"|"+elenei.getText();
	        		}else if(wd.getPageSource().contains("liebiao")){
	        			WebElement eleLibiao=wd.findElement(By.className("liebiao"));
	        			List<WebElement> eleLbs = eleLibiao.findElements(By.id("li"));//ul下li元素
	        			for(WebElement eleLb:eleLbs) com=com+"|"+eleLb.getText();
	        		}
	        		Logs.writeLogs(com);      		  		  		
		        }
		        //进入下一页,找到下一页链接
		        iDyn++;
		        WebElement pageEle =webDriver.findElement(By.linkText("下一页"));
		        String pagelink=pageEle.getAttribute("href");
		        Pattern ps= Pattern.compile("[?&=]+");
		        String[] values=ps.split(pagelink);
		        iSta=Integer.valueOf(values[values.length-1]);
		        webDriver.get(pagelink);
		        (new WebDriverWait(webDriver, 30)).until(new ExpectedCondition<Boolean>() {  
		            public Boolean apply(WebDriver dr) {  
		                int index = dr.getPageSource().indexOf("内容"); 
		                if(index != -1) return true;  //找到,退出等待
		                else return false;  //未找到,继续等待              
		            }  
		        });        
	        }       
		}catch (Exception e) { System.err.println( "Exception: " + e );}
		System.out.println(iCount);
		wd.close();
		wd.quit();
		webDriver.close();
        webDriver.quit();
	}
}

标签: 电容电抗器elecon

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台