自動化測試任務:
百度搜索自己的姓名。點擊第一個鏈接(或者第二個),在新的頁面上,添加斷言,驗證你的名字是否存在。
實驗資料百度網盤下載路徑:
鏈接: https://pan.baidu.com/s/1nVlHX_ivresul9Thg6Cvjw?pwd=2ydd 提取碼: 2ydd?
1.新建一個java工程
打開eclipse,點擊菜單 File -> New -> Java Project
輸入項目名稱,(為了區分作業,請包含自己的姓名)?
2.將selenium 包添加到編譯路徑
1)在項目上添加文件夾"lib"? ?( 文件夾名也可以是其他的,不影響使用)
彈出窗口中指定文件夾名稱
2) 將給大家下發資料中的lib文件夾下的“4_selenium-server-4..jar”復制到lib文件夾中
3)將jar包添加到編譯路徑
選中剛才添加的jar文件。點擊右鍵菜單 build path -> add to build path
如下圖所示。則說明selenium已經成功添加到編譯路徑了
3.將junit到編譯路徑
為了使用junit框架來編寫測試腳本,我們可以把junit添加到工程中來
在工程上點擊右鍵菜單 build path -> configure build path,..
彈出窗口上。在library選項卡下,點擊“Add library”
系統返回到 java build path 頁面。點擊【Apply and Close】
此時工程中可以看到junit4了奧
5.將瀏覽器驅動程序添加到工程中
selenium 并不能直接操作瀏覽器,它需要通過瀏覽器驅動程序操作瀏覽器。
為了便于管理,我們把瀏覽器驅動程序也放到項目工程中。
這里需要注意,瀏覽器驅動程序一定要和瀏覽器一致,是火狐還是edge瀏覽器,版本是多少,都要弄清楚。
例如,
edge瀏覽器在網址中輸入:edge://version/ 可以查看edge瀏覽器的版本號
火狐瀏覽器在網址中輸入:about:support 可以查看瀏覽器版本
本次以火狐瀏覽器為例說明
新建文件夾“firefoxdriver”
然后把我給大家的firefoxdriver下的“geckodriver-v0.34.0-win32.exe”復制,粘貼該文件夾下
如下所示,火狐瀏覽器的驅動程序已經放到工程中了,后面我們就可以使用該驅動程序了
4.創建測試文件
在工程src目錄上點擊右鍵 New - > class ,添加一個java文件
輸入測試類的名稱(請大家包含自己的姓名,后面作業提交截圖會用到)
5.編寫第一個測試用例
1)輸入如下圖中的矩形框內的代碼
2)導包
此時,@Test注解飄紅,這是因為還沒有將其添加到編譯路徑上
下面我們來導包。光標懸停在飄紅的Test上時,系統會給出若干個快速解決方案。如下所示,選擇導入 oig.junit?
導入后,@Test不在飄紅了,說明系統已經能識別到該類了。
3) 輸入腳本
大家可以復制如下腳本。
復制之前可以看一下我寫腳本的過程,對大家編寫腳本也有幫助
元素定位,大家可以借助開發中工具(F12可以打開)點選元素,拷貝它的xpath定位方式 和css定位方式
System.setProperty("webdriver.gecko.driver", "firefoxdriver\\geckodriver-v0.34.0-win32.exe"); // 設置chrome驅動程序的路徑WebDriver driver = new FirefoxDriver(); //實例化瀏覽器driver.get("https://www.baidu.com/"); //打開百度頁面driver.manage().window().maximize(); //最大化窗口driver.findElement(By.xpath("//*[@id=\"kw\"]")).sendKeys("曹紅杏"); //搜索框輸入 你的名字driver.findElement(By.xpath("//*[@id=\"su\"]")).click();driver.findElement(By.xpath("//*[@id=\"1\"]/div/div[1]/div[1]/h3/a")).click();//切換窗口Object win2 = driver.getWindowHandles().toArray()[1];driver.switchTo().window((String)win2);String text = driver.findElement(By.xpath("/html/body/div[6]/div/div/div[3]/form/div[1]/h3")).getText();Assert.assertEquals("曹紅杏", text);
6.運行測試用例
選中要運行的測試用例執行
由于腳本中未考慮測試程序和被測程序的同步問題。有的頁面還沒有加載完成。測試程序就試圖定位,導致元素定位不到,junit執行會出錯
7. 三種同步方式
大家可以使用任意一種同步方式,使得腳本正常運行
強制等待
Thread.sleep(n); ? 停頓n毫秒
sleep可能拋出異常,異常可以自己處理,即使用try..catch捕獲,也可以throw拋出,交給調用者處理
隱式等待
隱式等待時間也叫全局等待時間,并設置有超時時間;
即腳本運行到此處時,在等待時間內進行輪詢,直到頁面元素出現方繼續向下運行, 若在超時時間內仍有元素未出現,則不再等待,腳本繼續往下運行。
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3)); 隱式等待具有全局性,對所有的元素定位都有效果
顯示等待
顯式等待是針對于某個特定的元素設置的等待時間, 在設置時間內,元素變得可用,則繼續執行后續操作;如果等待時間后元素仍然不可用,則拋出NoSuchElementException異常。
例如:
WebDriverWait wait =new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*@id='1']/div/div[1]/h3/a")));
8.窗口切換
百度搜索時,點擊第一個鏈接,會打開一個新的頁面。如果希望到新的頁面上繼續操作。
則需要先切換到該頁面上奧。然后才能在該頁面上定位元素,進行操作。
?? ? ? ? ?Object win2 = driver.getWindowHandles().toArray()[1];
?? ? ? ? ?driver.switchTo().window((String)win2);