目錄
瀏覽器操作
瀏覽器回退,前進 與刷新
瀏覽器窗口設置大小?
瀏覽器設置寬高?
瀏覽器窗口最大化?
瀏覽器控制滾動條?
信息打印?
打印頁面的標題和當前頁面的URL
定位一組元素?
鼠標和鍵盤事件?
鍵盤?
鼠標?
下拉框操作?
通過索引定位(selectByIndex(索引值(從0開始)))
通過value屬性定位(selectByValue)
通過文本內容定位(selectByVisibleText)
文件上傳?
多級框架/窗口定位 (switchTo())
彈窗?
警告彈窗與確認彈窗
提示彈窗?
截圖?
關閉頁面(quit和close)
瀏覽器操作
瀏覽器回退,前進 與刷新
瀏覽器的回退指的是從當前頁面退回上一個頁面,如下圖:
這里要注意頁面和新建標簽頁的區別。
這里比如說我們打開百度搜索,然后搜索軟件測試后進行回退:
private static void test02() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");WebElement element= webDriver.findElement(By.cssSelector("#kw"));element.sendKeys("軟件測試");Thread.sleep(3000);webDriver.navigate().back();}
回退的時候需要使用驅動提供的navigate中的back方法,當然,如果想要回到回退前的頁面則可以使用navigate下的forward方法:
private static void test02() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");WebElement element= webDriver.findElement(By.cssSelector("#kw"));element.sendKeys("軟件測試");Thread.sleep(3000);webDriver.navigate().back();Thread.sleep(3000);webDriver.navigate().forward();}
當然,如果想刷新頁面的話可以使用navigate下的refresh方法:
private static void test02() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");WebElement element= webDriver.findElement(By.cssSelector("#kw"));element.sendKeys("軟件測試");Thread.sleep(3000);webDriver.navigate().back();Thread.sleep(3000);webDriver.navigate().forward();Thread.sleep(3000);webDriver.navigate().refresh();}
瀏覽器窗口設置大小?
瀏覽器窗口可以設置大小,可以設置窗口的寬,高,也可以使得窗口最大化
瀏覽器設置寬高?
如點擊百度搜索頁面的新聞按鈕后的窗口設置寬高?
webDriver.manage().window().setSize(new Dimension(200,500));
同時也可以最大化
瀏覽器窗口最大化?
webDriver.manage().window().maximize();
?
瀏覽器控制滾動條?
瀏覽器滾動條的控制需要依靠js腳本才能實現?
如在前端頁面中輸入:
document.documentElement.scrollTop=9999
滾動條就會往下移動。那么我們在idea中如何實現:
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=19999");
?
信息打印?
打印頁面的標題和當前頁面的URL
?獲取百度搜索頁面的標題:
String title= webDriver.getTitle();
獲取百度搜索頁面的URL:?
String url=webDriver.getCurrentUrl();
private static void test05() {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");//獲取當前頁面的標題String title= webDriver.getTitle();//獲取當前頁面的URLString url=webDriver.getCurrentUrl();System.out.println("當前頁面的標題為"+title);System.out.println("當前頁面的url為"+url);}
定位一組元素?
定位一組元素,就比如一些選項,他有幾種標簽類型,我們需要選中所有input的標簽中type值為context的選項:
private static void test06() {WebDriver webDriver=new ChromeDriver();webDriver.get("你要打開的頁面");//獲取所有的input標簽List<WebElement> elements= webDriver.findElements(By.cssSelector("input"));//選中符合type的值為context的選項for (int i = 0; i <elements.size() ; i++) {if(elements.get(i).getAttribute("type").equals("context")){elements.get(i).click();}else {;//什么也不干}}}
鼠標和鍵盤事件?
鍵盤?
比如我們在百度搜索框中輸入軟件測試后進行搜索,然后使用Ctrl+A選中搜索框中的軟件測試,進行Ctrl+X,然后再Ctrl+V進行復制搜索
private static void test07() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");//搜索軟件測試//WebElement element=webDriver.findElement(By.cssSelector("#kw"));webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測試");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//選中搜索框+ctrl+AwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"A");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//ctrl+xwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"X");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//ctrl+vwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"V");//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);sleep(3000);}
使用鍵盤輸入使用的是sendKeys中的參數keys調用相關的按鍵(如SHIFT,CONTROL等等)+對應的按鍵(需要用雙引號)??
鼠標?
比如我們在搜索軟件測試后在圖片處進行右擊:
private static void test08() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測試");webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);//將鼠標移動到圖片位置進行右擊WebElement element= webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));//借助ActionsActions actions=new Actions(webDriver);//進行右擊并展示actions.moveToElement(element).contextClick().perform();}
使用鼠標進行點擊的時候需要借助Actions對象,使用時候使用perform來展示出效果。
常用的鼠標操作還有:
?
下拉框操作?
下拉框的操作需要借助Select的對象進行操作
通過索引定位(selectByIndex(索引值(從0開始)))
private static void test09() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("下拉框的css標志位"));//借助Select對象Select select=new Select(element);select.selectByIndex(0);}
通過value屬性定位(selectByValue)
?
private static void test09() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("下拉框的css標志位"));//借助Select對象Select select=new Select(element);//select.selectByIndex(0);select.selectByValue("下拉框的value屬性對應的值");}
通過文本內容定位(selectByVisibleText)
?
private static void test09() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("下拉框的css標志位"));//借助Select對象Select select=new Select(element);//select.selectByIndex(0);//select.selectByValue("下拉框的value屬性對應的值");select.selectByVisibleText("C");}
文件上傳?
文件上傳就是選擇文件上傳的按鈕的文章,使用sendKeys將文件所在的路徑導入進行上傳文件
private static void test10() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");WebElement element=webDriver.findElement(By.cssSelector("文件上傳框的css標志位"));element.sendKeys("文件路徑,如E://xxx.xxx");}
多級框架/窗口定位 (switchTo())
由于我們直接使用選擇器進行定位是在div下進行的,對于一些在frame下的標簽我們是無法獲得定位的,所以就要用到了多級框架和窗口定位,?對于frame使用:
private static void test11() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");webDriver.switchTo().frame("frame的id");//找到標志所在的frame之后就可以正常使用了webDriver.findElement(By.cssSelector("選中元素的css標志位")).click();}
多級窗口定位與框架相似,使用?switchTo().window。
彈窗?
警告彈窗與確認彈窗
需要使用Alert對象,dismiss為取消,accept為確認
private static void test12() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");Alert alert= webDriver.switchTo().alert();//取消彈窗alert.dismiss();//確認彈窗alert.accept();//提示彈窗中輸入內容alert.sendKeys("輸入的內容");//進行確認alert.accept();}
提示彈窗?
需要我們輸入內容后點擊確認:
private static void test12() {WebDriver webDriver=new ChromeDriver();webDriver.get("需要訪問的網址");Alert alert= webDriver.switchTo().alert();//取消彈窗alert.dismiss();//確認彈窗alert.accept();//提示彈窗中輸入內容alert.sendKeys("輸入的內容");//進行確認alert.accept();}
截圖?
對于測試的結果,我們有的需要使用截圖來進行查看,使用自動化截圖首先要在maven倉庫中使用相關的依賴,在maven倉庫搜索common-io
?
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>
導入到pom.xml中
?在百度搜索軟件測試并進行截圖保存:
private static void test13() throws InterruptedException, IOException {WebDriver webDriver=new ChromeDriver();webDriver.get("https://www.baidu.com/");webDriver.findElement(By.cssSelector("#kw")).sendKeys("軟件測試");webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);//對搜索結果進行截圖File file=((TakesScreenshot)(webDriver)).getScreenshotAs(OutputType.FILE);//將文件放到硬盤FileUtils.copyFile(file,new File("C:\\Users\\ht\\2023-0816jietu.png"));}
截圖完成。
關閉頁面(quit和close)
對于測試后關閉頁面使用driver.quit和driver.close
quit和close是有區別的,quit關閉頁面后會清除掉緩存,而close則不清除緩存