一、訪問網頁地址:get(url)
Java代碼
String url="http://www.baidu.com";
driver.get(url);
二、刷新當前網頁:navigate().refresh()
java代碼
String url="http://www.baidu.com"; driver.get(url); driver.findElement(By.id("kw")).sendKeys("123123123"); Thread.sleep(2000); //刷新瀏覽器當前網頁 driver.navigate().refresh();
三、獲取頁面title屬性:getTitle()
java代碼
String url="http://www.baidu.com"; driver.get(url); //獲取頁面的title屬性 String title=driver.getTitle(); System.out.println(title); //斷言頁面上的title值是不是 百度一下,你就知道 Assert.assertEquals("百度一下,你就知道",title);
四、獲取頁面源代碼:getPageSource()
java代碼
String url="http://www.baidu.com"; driver.get(url); //獲取頁面源代碼 String pagesource=driver.getPageSource(); System.out.println(pagesource); //斷言源代碼中是否包含“百度一下,你就知道” Assert.assertTrue(pagesource.contains("百度一下,你就知道"));
五、獲取當前頁面的URL地址:getCurrentUrl()
Java代碼
String url="http://www.baidu.com/"; driver.get(url); //獲取URL地址 String getUrl=driver.getCurrentUrl(); //斷言 Assert.assertEquals("https://www.baidu.com/", getUrl);
六、清空文本框:clear()
java代碼
WebElement baiduKw=driver.findElement(By.id("kw")); baiduKw.sendkeys("selenium"); baiduKw.clear();
七、文本框輸入文本:sendkeys()
java代碼
WebElement baiduKw=driver.findElement(By.id("kw"));
baiduKw.sendKeys("selenium");
八、單擊元素:click()
java代碼
WebElement baiduKW=driver.findElement(By.cssSelector("#su")); baiduKW.click();
九、雙擊元素
HTML源碼
<input id='inputBox' type="button" style="width:100px;height:50px;" ondblclick="javascript:this.style.background='red'">請雙擊按鈕</>
Java代碼
WebElement inputB=driver.findElement(By.xpath("//input[@id='inputBox']")); //聲明Action對象 Actions ac=new Actions(driver); //使用doubleClick方法在定位的元素中進行鼠標的雙擊操作 ac.doubleClick(inputB).build().perform();
十、獲取文本:getText()
java代碼
//定位百度首頁右上角的 新聞 WebElement XW=driver.findElement(By.xpath("//*[@name='tj_trnews']")); //獲取文本 String Text1=XW.getText(); //校驗文本內容 Assert.assertEquals(Text1,"新聞");
十一、判斷元素是否展示:isDisplayed()
java代碼
WebElement baiduSu=driver.findElement(By.xpath("//*[@id='su']")); //獲取 百度一下 按鈕是否顯示 boolean Su=baiduSu.isDisplayed(); //校驗結果 Assert.assertTrue(Su);
十二、判斷元素是否激活:isEnabled()
HTML源碼:
<td>Button按鈕</td> <td class="SubButton"> <div id='button'> <input name="buttonSub" type='button' class='button' value='Submit' disabled="disabled"/> </div> </td>
Java代碼:
//定位元素,判斷是否激活 boolean submit=driver.findElement(By.xpath("//*[@name='buttonhtml']")).isEnabled(); //校驗結果 Assert.assertTrue(submit);
十三、判斷選擇框是否被選中:isSelected()
HTML源碼:
<td>RadioBox單選框</td> <td class="widgetStyle"> <div id='radio'> <input type='radio' name="identity" class='a'/><label>a</label></br> <input type='radio' name="identity" class='b'/><label>b</label></br> <input type='radio' name="identity" class='c'/><label>c</label></br> <input type='radio' name="identity" class='d'/><label>d</label> </div> </td>
java代碼:
//定位a單選框 WebElement a=driver.findElement(By.xpath("//*[@id='radio']/input[1]")); //點擊單選框 a.click(); //獲取單選框是否被選中 boolean b1=a.isSelected(); //校驗結果 Assert.assertTrue(b1);
十四、select下拉框處理
1. selectByIndex() 根據索引來選取,從0開始
2. selectByValue() 根據屬性value的屬性值來選取
3. selectByVisibleText()根據標簽之間的Text值,也就是頁面顯示的
注意:導入的包要正確不然會報錯。 import org.openqa.selenium.support.ui.Select;
單選下拉列表:
HTML源碼
<tr> <td>Select下拉列表</td> <div id='select'> <select id="selected"> <option value ="a">huawei</option> <option value ="b">oppo</option> <option value="c">vivo</option> <option value="d">xiaomi</option> <option value="e">hongmi</option> <option value="f">meizu</option> </select> </div> </tr>
Java代碼
package cn.WebDriverAPI; //單選下拉框 import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.Select; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; public class downList { public WebDriver driver; @Test public void test(){ System.setProperty("webdriver.chrome.driver", "E://chromedriver.exe"); driver=new ChromeDriver(); driver.get("file:///C:/Users/Administrator.USER-20180602NR/Desktop/selenium.html"); WebElement s=driver.findElement(By.xpath("//select[@id='selected']")); Select select=new Select(s); //isMultiple表示此下拉框列表是否允許多選,返回結果應為false Assert.assertFalse(select.isMultiple()); //輸出isMultiple方法返回的值 Boolean b=select.isMultiple(); System.out.println("b:"+b); //通過選項的文字進行選中 select.selectByVisibleText("oppo"); //獲取當前被選中的下拉列表選項文本並賦給text1 String text1=select.getFirstSelectedOption().getText(); //斷言 Assert.assertEquals("oppo", text1); System.out.println("文本"+text1); //使用下拉列表選項的value屬性值進行選中操作 select.selectByValue("c"); //獲取當前被選中的下拉列表選項文本並賦給text2 String text2=select.getFirstSelectedOption().getText(); //斷言 Assert.assertEquals("vivo",text2); //通過索引選擇,從0開始 select.selectByIndex(3); String text3=select.getFirstSelectedOption().getText(); Assert.assertEquals("xiaomi",text3); } @AfterMethod public void afterMethod(){ try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } driver.quit(); } }
十五、多選的下拉列表:
HTML源碼
<select id="selects" multiple="multiple"> <option value="java">java</option> <option value="c">c</option> <option value="c++">c++</option> <option value="VB">VB</option> <option value="php">php</option> <option value="python">python</option> <option value="ruby">ruby</option> </select>
java代碼
WebElement mus=driver.findElement(By.id("selects")); Select select=new Select(mus); //斷言下拉列表是否支持多選,支持多選isMultiple方法則返回True Assert.assertTrue(select.isMultiple()); //通過索引選擇 select.selectByIndex(0); //獲取當前被選中選項的文字 String text=select.getFirstSelectedOption().getText(); //斷言獲取到的文字是否符合實際 Assert.assertEquals("java",text); //通過value值選擇 select.selectByValue("c"); //通過選項文字選擇 select.selectByVisibleText("VB"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } //取消所有選項的選中狀態 select.deselectAll();
十六、操作radio單選框
HTML源碼
<div id='radio'> <input type='radio' name="fruit" class='yi'/><label>yi</label></br> <input type='radio' name="fruit" class='er'/><label>er</label></br> <input type='radio' name="fruit" class='san'/><label>san</label></br> <input type='radio' name="fruit" class='si'/><label>si</label></br> <input type='radio' name="fruit" class='wu'/><label>wu</label> </div>
java代碼
//查找class屬性為yi的按鈕 WebElement yi=driver.findElement(By.className("yi")); //判斷此按鈕是否為選中狀態,如果不是則調用click方法進行點擊 if(!yi.isSelected()) yi.click(); //斷言class屬性值為yi的按鈕處於被選中狀態。此時isSelected方法返回值應為True Assert.assertTrue(yi.isSelected()); //輸出isSelected方法返回值 Boolean b=yi.isSelected(); System.out.println("b:"+b);
十七、操作CheckBox復選框
HTML源碼
<div id='checkboxs'> <input type="checkbox" name="checkbox2"/><label>liu</label></br> <input type="checkbox" name="checkbox3"/><label>qi</label></br> <input type="checkbox" name="checkbox4"/><label>ba</label></br> <input type="checkbox" name="checkbox5"/><label>jiu</label></br> <input type="checkbox" name="checkbox6"/><label>shi</label> </div>
java代碼
//查找name值為checkbox2的復選框 WebElement liu=driver.findElement(By.xpath("//input[@name='checkbox2']")); //判斷如果此復選框還未被選中,則調用click方法單擊選中 if(!liu.isSelected()) liu.click(); //斷言此復選框被成功選中 Assert.assertTrue(liu.isSelected()); //停2秒看效果 Thread.sleep(2000); //判斷如果此復選框處於被選中狀態則再次調用click方法進行單擊取消復選框的選中狀態 if(liu.isSelected()) liu.click(); //斷言此復選框處於非選中狀態 Assert.assertFalse(liu.isSelected()); Thread.sleep(2000); //再次選中name值為checkbox2的復選框 liu.click(); Thread.sleep(2000); //查找所有type屬性值為 checkBox的復選框,並存在list容器內 List<WebElement> checkboxs= driver.findElements(By.xpath("//input[@type='checkbox']")); //遍歷容器中所有元素,判斷每個復選框處於非選中狀態,非選中狀態的則調用click方法單擊 //因為name值為checkbox2的復選框在上一步時已被選中所有在for循環中不會再被點擊 for(WebElement checkbox:checkboxs){ System.out.println(checkbox.isSelected()); Thread.sleep(1000); if(!checkbox.isSelected()) checkbox.click(); }
十八、檢查頁面元素文本是否符合預期
Java代碼
driver.get("http://www.baidu.com"); //獲取網頁title文字 String text=driver.getTitle(); Assert.assertEquals("百度一下,你就知道",text); //判斷title文字內容是否包含 百度一下 Assert.assertTrue(text.contains("百度一下")); //判斷title文字內容開始文字是不是 百度 Assert.assertTrue(text.startsWith("百度")); //判斷title文字內容的末尾文字是不是 知道 Assert.assertTrue(text.endsWith("知道"));
十九、判斷頁面元素是否存在
Java代碼
package cn.WebDriverAPI; //判斷頁面元素是否存在 import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; import junit.framework.Assert; public class ElementPresent { WebDriver driver; //寫一個判斷頁面元素是否存在的方法 IsElementPresent private boolean IsElementPresent(By by){ try{ //如果使用傳入的參數by能找到頁面元素,則函數返回true,表示成功地找到頁面元素 driver.findElement(by); return true; }catch(NoSuchElementException e){ //如果使用傳入的參數by 沒有找到頁面元素,返回false return false; } } @Test public void test(){ System.setProperty("webdriver.chrome.driver","E://chromedriver.exe"); driver=new ChromeDriver(); driver.get("http://www.baidu.com"); //調用寫的IsElementPresent方法查找元素 if(IsElementPresent(By.xpath("//input[@name='wd']"))==true){ //如果成功定位到頁面元素,則把頁面元素對象存儲到element變量中 WebElement element=driver.findElement(By.xpath("//input[@name='wd']")); //判斷element變量對象是否處於可能狀態。如果可用則輸入“selenium”關鍵字 if(element.isEnabled()==true){ element.sendKeys("selenium"); } }else{ //如果頁面元素沒找到,則將此用例設置為失敗,並打印原因 Assert.fail("頁面元素沒找到"); } } @AfterMethod public void aftermethod() throws InterruptedException{ Thread.sleep(2000); driver.quit(); } }
二十、通過句柄來識別和操作新彈出的瀏覽器窗口
HTML源碼
<html> <head> <title>Selenium</title> </head> <body> <td>Input輸入框</td> <div id='ifra' > <input type="text" id="input" name='ips'/> </div> </br> <div id='open'> <a href="http://www.baidu.com" class='open' target='bank'>Open new window打開百度</a><br> </div> <br> </body> </html>
java代碼
//定位點擊元素,打開新的窗口 driver.findElement(By.className("open")).click(); //獲取當前頁面句柄 String handle=driver.getWindowHandle(); //獲取所有頁面句柄,並循環判斷不是當前的句柄就做選取switchTo() for(String handles:driver.getWindowHandles()){ if(handles.equals(handle)) continue;//跳過本次循環,不執行下面的命令直接進行下一次循環 //break; //結束全部for循環 driver.switchTo().window(handles); } //在新打開的頁面中進行操作 driver.findElement(By.id("input")).sendKeys("新頁面"); //關閉新頁面 driver.close(); //選擇原來的句柄,切到原來的界面 driver.switchTo().window(handle); //在原來的界面進行操作 driver.findElement(By.id("input")).sendKeys("舊頁面");
二十一、使用Title屬性識別和操作新淡出的瀏覽器窗口
HTML源碼
<html> <head> <title>SeleniumElement</title> </head> <body> <td>Input輸入框</td> <div id='ifra' > <input type="text" id="input" name='ips'/> </div> </br> <div id='open'> <a href="http://www.baidu.com" class='open' target='bank'>Open new window打開百度</a><br> </div> <br> </body> </html>
Java代碼
//定位點擊連接元素,打開新窗口 driver.findElement(By.xpath("//a[text()='Open new window打開百度']")).click(); //獲取當前頁面句柄 String handle=driver.getWindowHandle(); //獲取所有頁面句柄 Set<String> allHandle=driver.getWindowHandles(); //如果容器存儲的對象不為空,則遍歷allHandle中所有句柄 if(!allHandle.isEmpty()){ for(String windowhandle:allHandle){ try{ //調用driver.switchTo().window(windowhandle).getTitle()方法 //獲取瀏覽器的Title屬性,並判斷是否是“百度一下,你就知道” if(driver.switchTo().window(windowhandle).getTitle().equals("百度一下,你就知道")) //判斷正確則說明是百度首頁,則在輸入框中輸入 javaselenium driver.findElement(By.xpath("//input[@id='kw']")).sendKeys("javaselenium"); }catch(NoSuchWindowException e){ //如果沒有,拋出NoSuchWindowException,打印異常的堆棧信息 e.printStackTrace(); } } } //返回最開始打開的瀏覽器頁面 driver.switchTo().window(handle); //斷言瀏覽器頁面的Title屬性值是否是 SeleniumElement Assert.assertEquals(driver.getTitle(),"SeleniumElement"); driver.findElement(By.xpath("//input[@id='input']")).sendKeys("123456");
二十二、使用頁面文字內容識別和處理新彈出的瀏覽器窗口
HTML源碼(同二十一)
java代碼
//打開新窗口 百度頁面 driver.findElement(By.xpath("//a[text()='Open new window打開百度']")).click(); //獲取當前頁面的句柄 String OldHandle=driver.getWindowHandle(); //獲取所有句柄 Set<String> AllHandle=driver.getWindowHandles(); //判斷如果AllHandle不為空則進行遍歷AllHandle if(!AllHandle.isEmpty()){ try{ for(String Handle:AllHandle){ //調用driver.switchTo().window(Handle).getPageSource().contains()方法 //逐個獲取頁面的源碼,判斷是否包含“百度一下,你就知道” if(driver.switchTo().window(Handle).getPageSource().contains("百度一下,你就知道")) //如果判斷成立,則說明當前頁面為百度首頁,並在輸入框中輸入 java driver.findElement(By.xpath("//input[@id='kw']")).sendKeys("java"); } }catch(NoSuchWindowException e){ e.printStackTrace(); } //調用driver.switchTo().window()方法切到原頁面,在輸入框中輸入old頁面 driver.switchTo().window(OldHandle).findElement(By.xpath("//input[@id='input']")).sendKeys("old頁面"); //斷言頁面源碼包含 SeleniumElement Assert.assertTrue(driver.getPageSource().contains("SeleniumElement"));
二十三、alert彈窗
HTML源碼:
<input id='test' type='button' onclick="alert('這是一個alert彈框');" value='單擊此按鈕,彈出alert彈窗'>
java代碼:
//定位Alert彈窗 WebElement At=driver.findElement(By.id("test")); //點擊alert按鈕 At.click(); //選擇alert彈窗 Alert alert=driver.switchTo().alert(); //獲取alert彈窗中的文本內容 String text=alert.getText(); //校驗alert彈窗中的文本 Assert.assertEquals(text,"這是一個alert彈框"); //點擊alert彈窗中的確定按鈕 alert.accept();
二十四、Confirm彈窗
HTML源碼:
<input id='testcf' type='button' onclick="confirm('這是一個confirm彈框');" value='單擊此按鈕,彈出confirm彈窗'></input>
java代碼:
//定位confirm按鈕 WebElement Cf=driver.findElement(By.xpath("//*[@id='testcf']")); Cf.click(); //選取alert彈窗 Alert confirm=driver.switchTo().alert(); //點擊confirm彈窗上的確定按鈕 confirm.accept(); //點擊confirm彈窗上面的取消按鈕 //confirm.dismiss();
二十五、prompt彈窗
HTML源碼
<input id='testpt' type='button' onclick="prompt('這是一個prompt彈框');" value='單擊此按鈕,彈出prompt彈窗'></input>
Java代碼
//定位prompt按鈕 WebElement Cf=driver.findElement(By.xpath("//*[@id='testpt']")); Cf.click(); //選取alert彈窗 Alert prompt=driver.switchTo().alert(); //在prompt彈窗的輸入框中輸入文字 prompt.sendKeys("在prompt彈窗中的輸入框中輸入123za。。。"); Thread.sleep(3000); //點擊prompt彈窗中的確定按鈕 prompt.accept(); //點擊Prompt彈窗中的取消按鈕 //prompt.dismiss();
二十六、Frame(iFrame)中元素的定位和操作
frame標簽有frameset、frame、iframe三種,frameset在selenium中跟其他普通標簽沒有區別,不需要層層切換,不影響正常的定位。而frame與iframe需要層層切,他倆對selenium定位而言是一樣的,selenium有一組方法對frame(iFrame)進行操作。具體方法有如下幾種(java代碼中都有用到):
① 使用iframe標簽的id或name屬性值定位到iframe
② 使用WebElement方法定位到iframe
③ 使用index方法定位到iframe
④ 使用iframe中的HTML源碼定位到iframe
HTML源碼
<html> <head> <title>Frame</title> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"> <meta content=always name=referrer> </head> <body> <td>Input輸入框</td> <div id='put' > <input type="text" id="input" name='ips'/> </div> <br> <div id='iFrame'> <td>Iframe1</td><br> <iframe width=700 height=153 id=iFrameId frameborder=0 src="Xpath.html"></iframe> <br> <br> <td>Iframe2</td><br> <iframe width=700 height=150 name=iFrameName frameborder=0 src="Xpath.html"></iframe> </div> </body> </html>
java代碼
//通過iframe標簽的id屬性值定位到Iframe1中的iframe,並將控制權交給它 driver.switchTo().frame("iFrameId"); //定位iframe框架1中的輸入框並輸入 iFreme1 WebElement iF1=driver.findElement(By.xpath("//input[@id='input']")); iF1.sendKeys("iFreme1"); //等2秒看效果 Thread.sleep(2000); //清除文本 iF1.clear(); //控制權交回原來的界面 driver.switchTo().defaultContent(); //在外面的輸入框中輸入 defaultContend WebElement in=driver.findElement(By.xpath("//input[@id='input']")); in.sendKeys("defaultContend"); Thread.sleep(2000); in.clear(); Thread.sleep(2000); //通過iframe的name屬性值定位Iframe2中的iframe,並將控制權交給它 driver.switchTo().frame("iFrameName"); //在Iframe框架2中的輸入框中輸入iFrame2 WebElement iF2=driver.findElement(By.xpath("//input[@id='input']")); iF2.sendKeys("iFreme2"); Thread.sleep(2000); iF2.clear(); //控制權交回原來的界面 driver.switchTo().defaultContent(); Thread.sleep(2000); //通過WebElement方法定位到iFrame。 //通過iframe標簽的height屬性值定位iframe1 WebElement ifr1=driver.findElement(By.xpath("//iframe[@height='153']")); //控制權交給iframe1 driver.switchTo().frame(ifr1); //定位里面的輸入框 WebElement iFrame1input=driver.findElement(By.id("input")); //輸入 WebElement iFrame1input.sendKeys("WebElement"); Thread.sleep(2000); //清除文本 iFrame1input.clear(); //控制權交給原來的界面 driver.switchTo().defaultContent(); //使用index方法進入指定iframe,索引號從 0 開始 //控制權交給iframe2。如果是0的話切到iframe1中 driver.switchTo().frame(1); //定位里面的輸入框 WebElement iFrame2input=driver.findElement(By.id("input")); //輸入 WebElement iFrame2input.sendKeys("index"); //清除文本 Thread.sleep(2000); iFrame2input.clear(); //控制權交給原來的界面 driver.switchTo().defaultContent(); Thread.sleep(2000); //使用iframe中的HTML源碼內容來定位操作iframe //找到頁面中所有iframe,並存儲到iframes容器里 List<WebElement> iframes= driver.findElements(By.tagName("iframe")); //遍歷iframes中所有iframe頁面,查找包含 iFrameId 的iframe頁面 for(WebElement iframe:iframes){ //將控制權交給iframe driver.switchTo().frame(iframe); //逐個iframe頁面進行判斷是否包含 iFrameId 關鍵字 if(driver.getPageSource().contains("iFrameId")){ //判斷成立說明找到指定iframe頁面,則在當前iframe頁面中的輸入框中輸入 PageSourceIFrameID WebElement pg=driver.findElement(By.id("input")); pg.sendKeys("PageSourceIFrameID"); //找到指定iframe后退出for循環 break; }else{ //如果沒有找到指定iframe,則退出當前iframe頁面。for循環繼續進入下一輪循環 driver.switchTo().defaultContent(); } } //找到指定iframe頁面並執行完后面語句后退出當前iframe頁面 driver.switchTo().defaultContent(); //在輸入框中輸入 控制權回到原點 driver.findElement(By.id("input")).sendKeys("控制權回到原點");
二十七、操作瀏覽器的Cookie
可以在瀏覽器開發者工具頁面查看效果,查看cookies路徑:APPlication->Cookies
java代碼
driver.get("http://www.baidu.com"); //獲取cookies Set<Cookie> data = driver.manage().getCookies(); System.out.println(data); //獲得cookies個數 System.out.println(driver.manage().getCookies().size()); //刪除所有cookies driver.manage().deleteAllCookies(); //獲得cookies個數,此時cookies的個數為0 System.out.println(driver.manage().getCookies().size()); //設置cookies Cookie c1 = new Cookie("addCookies", "123456789"); driver.manage().addCookie(c1); //新增了一條,此時cookie個數為1 System.out.println(driver.manage().getCookies().size());
二十八、查看輸入框輸入的字符
java代碼
driver.get("http://www.baidu.com"); WebElement input=driver.findElement(By.id("kw")); input.sendKeys("Selenium"); //調用getAttribute方法獲取到輸入框中的文本內容,並賦給text String text=input.getAttribute("value"); //斷言 Assert.assertEquals("Selenium",text); System.out.println(text);