一、环境搭建
官网需要下载selenium对应的jar包,谷歌浏览器及对应的驱动
官网下载地址:http://www.seleniumhq.org/download/
浏览器驱动:https://www.npmjs.com/package/selenium-webdriver
2、jdk环境变量
jdK下载地址:https://www.oracle.com/technetwork/java/javaee/downloads/index.html
环境变量配置参考:https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html
3、maven中pom文件配置需要的jar包支持
如果是java Project,直接导入下载的jar包就行了
二、Selenium WebDriver运行原理
使用eclipse打开WebDriver.class文件会发现里面支持许多方法的调用
三、常见API用法
1.1打开浏览器
想要浏览器完成界面元素的操作,首页要通过WebDriver打开浏览器,WebDriver为上面下载的
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\chromedriver.exe");
webdriver=new ChromeDriver();
/*设置隐私等待让浏览器正常运行*/
webdriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
打开firefox浏览器:
WebDriver driver = new FirefoxDriver();
打开IE浏览器
WebDriver driver = new InternetExplorerDriver ();
打开chrome浏览器
WebDriverdriver = new ChromeDriver();
1.2.1 最大化浏览器
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
1.2.3 关闭浏览器
WebDriver driver = new FirefoxDriver();
driver.close();
driver.quit();
1.3 打开测试页面
driver.get("http://www.google.com");
1.4 页面元素定位
Webdriver提供下面两种方法来定位页面元素,参数是By对像,最常用是By.id和By.name查找。
findElement 定位某个元素,如果没有找到元素会抛出异常:NoSuchElementException
findElements 定位一组元素
例如需要定位如下元素:
<input class="input_class" type="text" name="passwd" id="passwd-id" />
By.id:
WebElement element = driver.findElement(By.id("passwd-id"));
By.name:
WebElement element = driver.findElement(By.name("passwd"));
By.xpath:
WebElement element =driver.findElement(By.xpath("//input[@id='passwd-id']"));
By.className
WebElement element = driver.findElement(By.className("input_class"));
By.cssSelector
WebElement element = driver.findElement(By.cssSelector(".input_class"));
By.linkText:
//通俗点就是精确查询
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebElement element = driver.findElement(By.linkText("百科"));
By.partialLinkText:
//这个方法就是模糊查询
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
WebElement element = driver.findElement(By.partialLinkText("hao"));
By.tagName:
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/");
String test= driver.findElement(By.tagName("form")).getAttribute("name");
System.out.println(test);
1.5 如何对页面元素进行操作
1.5.1 输入框(text field or textarea)
WebElement element = driver.findElement(By.id("passwd-id"));
element.sendKeys(“test”);//在输入框中输入内容:
element.clear(); //将输入框清空
element.getText(); //获取输入框的文本内容:
1.5.2下拉选择框(Select)
Select select = new Select(driver.findElement(By.id("select")));
select.selectByVisibleText(“A”);
select.selectByValue(“1”);
select.deselectAll();
select.deselectByValue(“1”);
select.deselectByVisibleText(“A”);
select.getAllSelectedOptions();
select.getFirstSelectedOption();
1.5.3单选项(Radio Button)
WebElement radio=driver.findElement(By.id("BookMode"));
radio.click(); //选择某个单选项
radio.clear(); //清空某个单选项
radio.isSelected(); //判断某个单选项是否已经被选择
1.5.4多选项(checkbox)
WebElement checkbox = driver.findElement(By.id("myCheckbox."));
checkbox.click();
checkbox.clear();
checkbox.isSelected();
checkbox.isEnabled();
1.5.5按钮(button)
WebElement btn= driver.findElement(By.id("save"));
btn.click(); //点击按钮
btn.isEnabled (); //判断按钮是否enable
1.5.7弹出对话框(Popup dialogs)
Alert alert = driver.switchTo().alert();
alert.accept(); //确定
alert.dismiss(); //取消
alert.getText(); //获取文本
1.5.8表单(Form)
Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
WebElement approve = driver.findElement(By.id("approve"));
approve.click();
或
approve.submit();//只适合于表单的提交
1.5.9截图保存图片文件
1.6 WindowHandle和 Frames之间的切换
例如从登陆页面跳转到index页面,此时WindowHandle就会发生变化,通过封装webdriverde的getWindowsHandle方法就可解决该问题
再就是Frames的切换,后台系统用的比较多
源码就是这样的,套两层frameset,里面放frame
<html>
<frameset rows="*" cols="150,*">
<frame src="/example/html/frame_a.html" id="left">
<frameset rows="50,*">
<frame src="/example/html/frame_b.html" id="top">
<frame src="/example/html/frame_c.html" id="main">
</frameset>
</frameset>
</html>
当进入到这个页面时,driver停留在最大的frameset上,如果需要操作left页面就需要使用
webdriver.switchTo().frame(left);
如果left页面操作完需要操作top或者main的页面时,需要先从frame返回到frameset再
到子frameset的frame中,思路如下
webdriver.switch_to_parent_frame();
webdriver.switchTo().frame(main);
从main返回到left时就需要
webdriver.switch_to_parent_frame();
webdriver.switch_to_parent_frame();
webdriver.switchTo().frame(main);
1.7 表格(Table)
先找到table,再找到对应列或者行,赋值给list,for循环取出值