模拟浏览器自动化测试工具Selenium之三页面窗口切换开发篇
时间:2023-05-11 00:07:00
不同的网站有不同的特点,需要掌握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() { 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 bHandlers = webDriver.getWindowHandles(); String bHandler = bHandlers.iterator().next(); //执行点击操作,打开新页面 WebElement eleSearch = webDriver.findElement(By.className("search_shu4")); action.moveToElement(eleSearch); action.click().perform(); ///打开新页面 /// Set 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() { 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 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 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 rows = table.findElements(By.tagName("tr"));//获取table内行元素 //List cells=rows.get(0).findElements(By.tagName("td"));//获取row第一行的所有列 for(WebElement row:rows) com=com "|" row.getText(); }else if(wd.getPageSource().contains("table2")){ List 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 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 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() {
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();
}
}