chrome的版本和chromedriver的版本對應關係和下載地址
http://www.javashuo.com/article/p-wlhinbws-eo.htmljavascript
存放路徑:
/工程名/src/main/resources/selenium/driver/chromedriver.execss
pom.xml添加dependencyhtml
<project> <dependencies> <!--selenium框架 --> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.50.0</version> </dependency> <!--testNG測試框架 --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8</version> </dependency> </dependencies> </project>
自寫的類——>selenium——>chromedriver.exe——>chrome瀏覽器java
//此處src前面沒有"/",說明是相對工程根目錄的路徑 System.setProperty("webdriver.chrome.driver", "src/main/resources/selenium/driver/chromedriver.exe"); WebDriver driver = new ChromeDriver();
若是要窗口最大化,先設置參數,啓動的時候傳入ios
//設置環境變量,指定chromedriver的路徑 System.setProperty("webdriver.chrome.driver", "src/main/resources/selenium/driver_v236_63_65/chromedriver.exe"); //設置瀏覽器的參數 ChromeOptions options = new ChromeOptions(); //最大化瀏覽器 options.addArguments("--test-type", "--start-maximized"); //指定瀏覽器位置 //options.setBinary("C:/XXXXXXX/chrome.exe"); //打開瀏覽器 WebDriver driver = new ChromeDriver(options);
常見報錯緣由:web
//先線程休眠3秒,便於觀察,而後才關閉,否則啓動就關閉像閃退 try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //關閉瀏覽器,driver.close()是關閉當前窗口 driver.quit();
sleep()方法:chrome
public static void sleep(int millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
driver.get("http://www.baidu.com");
driver.navigate().to("http://www.dangdang.com");
// 1. 先打開一個界面 driver.navigate().to("http://www.baidu.com"); //2. to()方法再打開另外一個界面 driver.navigate().to("http://www.dangdang.com"); sleep(2000); //3. back()回退 driver.navigate().back(); sleep(2000); //4. forward()前進 driver.navigate().forward(); sleep(2000); //5. refresh()刷新 driver.navigate().refresh();
元素包含信息:windows
WebElement alertButton = driver.findElement(By.id("alertButtonId"));
WebElement alertButton = driver.findElement(By.name("alertButtonName"));
WebElement buttons = driver.findElements(By.className("alertButtonClass"));
java | html |
---|---|
WebElement元素類 | 標籤(如html、body、head、table、input、tr、alert彈出框等等) |
符號 | 用途 | 示例 |
---|---|---|
/ | 絕對路徑 | /html/body/table/tbody/tr/td/input |
// | 相對路徑 | //body/table//input |
標籤名 | html的全部標籤 | //input |
[] | 限定t條件 | //input[@id='xxxid' and @type='button'] |
數字 | 指定匹配到的第幾個 | //input[3] |
@屬性名=屬性值 | 經過屬性限定條件 | |
函數() | 經過函數限定條件 | |
and/or | 鏈接多個條件 |
WebElement alertButton = driver.findElement(
By.xpath("//input[@id='alertButtonId' and @type='button']"));
<html>
<head> <title>導航欄</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> xxxxxx替換元素代碼xxxxxxx </body> </html>
<input type="text" name="edit" id="edit" value="" />
sendkeys()傳要填的內容瀏覽器
WebElement text=
driver.findElement(By.xpath("//input[@type='text' and @id='edit']")); text.clear(); text.sendKeys("傻不傻?傻!");
<input type="file" name="attach[]" />
找到元素,sendkeys()傳文件路徑bash
WebElement input=
driver.findElement(By.xpath("//input[@type='file' and @name='attach[]']")); input.clear(); input.sendKeys("C:/HtmlWeb/selenium/html_00_summary.html");
<input type='radio' name="company" value='Baidu' /> <label>百度</label> <br/> <input type='radio' name="company" value="AliBaBa"/> <label>阿里巴巴</label><br/> <input type='radio' name="company" value='Tencent' checked /><label>騰訊</label><br/> <input type='radio' name="company" value='Mi' /> <label>小米</label>
input元素,類型是raidio,name相同的多個radio類型的input組成選項,靠value進行區分
選擇具體某個選項,並選擇:
WebElement radio=
driver.findElement(
By.xpath("//input[@type='radio' and @name='company' and @value='Mi']")); radio.click();
全部選項都點一遍:
List<WebElement> radios=
driver.findElements(By.xpath("//input[@type='radio' and @name='company']")); for(int i=0;i<radios.size();i++){ WebElement item=radios.get(i); sleep(1000); }
<input type="checkbox" name="course" value="web" /><label>網絡</label><br /> <input type="checkbox" name="course" value="training" /><label>培訓</label><br /> <input type="checkbox" name="course" value="friend" /><label>朋友介紹</label><br /> <input type="checkbox" name="course" value="other" /><label>其餘方式</label>
input元素,類型是checkbox,name相同的多個checkbox類型的input組成選項,靠value進行區分
選擇具體某一個選項,並選擇:
WebElement checkbox=
driver.findElement(
By.xpath("//input[@type='checkbox' and @name='course' and @value='web']")); checkbox.click();
全部選項都勾選:
List<WebElement> checkboxs=
driver.findElements(
By.xpath("//input[@type='checkbox' and @name='course']")); for(int i=0;i<checkboxs.size();i++){ WebElement item=checkboxs.get(i); item.click(); sleep(1000); }
<input type="date" name="startTime">
先寫JavaScript代碼,而後經過driver執行js
js第一句是將只讀屬性去掉(若時間沒設只讀,則不須要)
js第二句是給時間元素設置value屬性,值爲「2018-04-10」
String js="document.getElementsByName('startTime')[0].removeAttribute('readOnly');document.getElementsByName('startTime')[0].setAttribute('value','2018-04-10');"; JavascriptExecutor jsDriver = (JavascriptExecutor) driver; jsDriver.executeScript(js);
<input type="button" name="promptbutton" value="測試prompt對話框" onclick="confirm('肯定提交嗎?');" />
找到元素,click()點擊
WebElement button=
driver.findElement(By.xpath("//input[@type='button' and @id='alertButtonId']")); button.click(); Alert alert=driver.switchTo().alert(); alert.accept();
多行多列的輸入框
<textarea rows="3" ></textarea>
WebElement textarea=driver.findElement(By.xpath("//textarea[@rows='3']")); textarea.clear(); textarea.sendKeys(「內容」);
可點擊的圖片,都是外面有一層<a>超連接,只是用圖片替代了文本
自動化測試的時候,要定位的是<a>超連接
<a id='imgA'> <img src="xxxx"> </a>
WebElement img=driver.findElement(By.xpath("//a[@id='imgA']")); img.click();
select標籤:定義一個下拉框
option選項:定義一個選項,一個下拉框能夠有不少個選項,即多個option
option的3個屬性:index(選項序號,默認自動加上的)、value選項值、visibleText展示文字
<select id="Selector"> <option value="apple" >蘋果</option> <option value="peach" >桃子</option> <option value="banana" >香蕉</option> <option value="orange">桔子</option> <option value="grape" >葡萄</option> <option value="mango" >芒果</option> </select>
WebElement selectEle=driver.findElement(By.xpath("//select[@id='Selector']")); Select select=new Select(selectEle); select.selectByIndex(0); sleep(1000); select.selectByValue("banana"); sleep(1000); select.selectByVisibleText("桔子"); sleep(1000);
<a href="http://www.guoyasoft.com">Copyright 2017 guoyasoft</a>
定位超連接的3中方法:
WebElement link=
driver.findElement(By.xpath("//a[@href='http://www.guoyasoft.com']"));
WebElement link=driver.findElement(By.linkText("Copyright 2017 guoyasoft"));
WebElement baike=driver.findElement(By.partialLinkText("guoyasoft"));
三種點擊方式:一、 當前界面打開;二、新的標籤頁打開;新的窗口打開
直接點擊:當前界面打開
WebElement link=
driver.findElement(By.xpath("//a[@href='http://www.guoyasoft.com']")); link.click();
ctrl+shift+點擊:當前瀏覽器的新標籤頁打開
Actions actions=new Actions(driver); actions.keyDown(Keys.SHIFT).keyDown(Keys.CONTROL).click(link).perform();
shift+點擊:新窗口打開(新開一個瀏覽器)
Actions actions=new Actions(driver); actions.keyDown(Keys.SHIFT).click(link).perform();
<tr> <td>prompt對話框</td> <td><input type="button" name="promptbutton" value="測試prompt對話框" onclick="clickbutton();" /></td> </tr>
javascript:
function clickbutton() { var name = prompt("測試prompt對話框", ""); if (name != null && name != "") { //document.write(name); alert(name); } }
WebElement clickOnPrompt = driver.findElement(By
.xpath("//td/input[@name='promptbutton']")); clickOnPrompt.click(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Alert prompt = driver.switchTo().alert(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } prompt.sendKeys("I love Selenium"); prompt.accept(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } Alert afterAccept = driver.switchTo().alert(); afterAccept.accept(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); }
<tr> <td>超連接</td> <td> <div> <a id="link_baidu" href="https://www.baidu.com">百度</a> </div> <div> <a id="link_jd" href="https://www.JD.com">京東</a> </div> <div> <a id="link_dangdang" href="http://www.dangdang.com/">噹噹</a> </div> </td> </tr>
核心代碼:
public static void switchToWindow(String windowTitle, WebDriver dr) { // 將頁面上全部的windowshandle放在入set集合當中 String currentHandle = dr.getWindowHandle(); Set<String> handles = dr.getWindowHandles(); for (String s : handles) { dr.switchTo().window(s); // 判斷title是否和handles當前的窗口相同 if (dr.getTitle().contains(windowTitle)) { break;// 若是找到當前窗口就中止查找 } } }
實踐測試:
private void testWindow(WebDriver driver, TestSelenium3 test) { /* * 第1步:打開測試界面 */ driver.get("http://127.0.0.1:8081/HtmlWeb/selenium/html_00_summary.html"); Actions actions = new Actions(driver); /* * 第2步:點擊京東,再切換回原界面 */ WebElement jd = driver.findElement(By.xpath("//a[@id='link_jd']")); //按順序點,按順序放 actions.keyDown(Keys.SHIFT).keyDown(Keys.CONTROL).click(jd) .keyUp(Keys.SHIFT).keyUp(Keys.CONTROL).perform(); test.mySleep(1000); //窗口切換到京東,進行操做,此處不作任何操做 switchToWindow("京東", driver); test.mySleep(1000); //切換回原窗口 switchToWindow("selenium", driver); test.mySleep(1000); /* * 第3步:點擊百度,再切換回原界面 */ WebElement baidu = driver .findElement(By.xpath("//a[@id='link_baidu']")); actions.keyDown(Keys.SHIFT).keyDown(Keys.CONTROL).click(baidu) .keyUp(Keys.SHIFT).keyUp(Keys.CONTROL).perform(); actions.click(); test.mySleep(1000); switchToWindow("百度一下,你就知道", driver); test.mySleep(1000); switchToWindow("selenium", driver); test.mySleep(1000); /* * 第4步:點擊噹噹,再切換回原界面 */ WebElement dangdang = driver.findElement(By .xpath("//a[@id='link_dangdang']")); actions.keyDown(Keys.SHIFT).keyDown(Keys.CONTROL).click(dangdang) .keyUp(Keys.SHIFT).keyUp(Keys.CONTROL).perform(); actions.click(); test.mySleep(1000); switchToWindow("噹噹", driver); test.mySleep(1000); switchToWindow("selenium", driver); test.mySleep(1000); }
<html> <head> <title>iframe測試界面</title> </head> <frameset rows="15%,75%,*" frameborder="1" framespacing="10"> <frame src="top.html"></frame> <frameset cols="20%,*"> <frame src="left.html"></frame> <frame src="right.html" name="content"></frame> </frameset> <frame src="button.html"></frame> </frameset> </html>
<html> <body> <!--圖片放到webapp/images下面--> <img src="../../images/top.png" width="90%" height="80%"> </body> </html>
<html> <body> <ul> <li><a href="http://www.baidu.com" target="content">百度</a></li> <li><a href="http://www.jd.com" target="content">京東</a></li> <li><a href="http://www.taobao.com" target="content">淘寶</a></li> <li><a href="http://www.dangdang.com" target="content">噹噹</a></li> <li><a href="http://www.youku.com" target="content">優酷</a></li> </ul> </body> </html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>管理頁面</title> </head> <body>該界面用於展現菜單內容 </body> </html>
<html> <body> <img src="../../images/button.png" width="90%" height="75%" > </body> </html>
driver.get("http://127.0.0.1:8081/HtmlWeb/selenium/iframe2/main.html");
WebElement leftFrame=driver.findElement(By.xpath("//frame[@src='left.html']"));
driver.switchTo().frame(leftFrame);
WebElement baidu=driver.findElement(By.xpath("//a[@href='http://www.baidu.com']")); baidu.click(); test.mySleep(2000);
driver.switchTo().defaultContent();
WebElement rightFrame=driver.findElement(By.xpath("//frame[@src='right.html']"));
driver.switchTo().frame(rightFrame);
test.mySleep(3000); WebElement input=driver.findElement(By.xpath("//input[@id='kw']")); input.clear(); input.sendKeys("果芽軟件"); WebElement submit=driver.findElement(By.id("su")); submit.click(); test.mySleep(2000); //定位超連接元素的專用方法(精確和模糊兩種,相似id和name選擇器) WebElement baike=driver.findElement(By.linkText("上海果芽軟件科技有限公司_百度百科")); //WebElement baike=driver.findElement(By.partialLinkText("果芽軟件")); baike.click(); test.mySleep(2000);
try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }
//設置界面加載等待時間,全局設置,做用於driver,對全部後續界面加載都有效 driver.manage().timeouts().pageLoadTimeout(3000, TimeUnit.MILLISECONDS); driver.get("http://www.baidu.com"); //設置元素定位超時等待時間,全局設置,做用於driver,對全部後續元素定位都有效 driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS); WebElement element=driver.findElement(By.xpath("kw"));
WebDriverWait wait=new WebDriverWait(driver, 2); wait.until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { boolean loadcomplete = d.findElement(By.xpath("")).isDisplayed(); return loadcomplete; } });