小練習--下拉框
創建packa包 autotest03,創建class類AddAddress.java
在自動化測驗02里面,我們學習了用xpath來定位下拉框的元素,現在我們用新的方法來定位,用select類來定位
我們可以創建Select類的物件,需要提前定位到下拉框,然后使用物件操作一個下拉框

第一項的id是province,那么我們可以撰寫代碼,定義變數
//下拉框操作
//創建Select類的物件
Select s1 = new Select(driver.findElement(By.id("province")));
然后呼叫方法
s1.selectByVisibleText("北京市");//option的文本內容

我們可以看到這里面有三個方法,分別是值、索引、文本
在選擇的時候,前端代碼會進行重繪,所以需要強制等待時間
Thread.sleep(2000);
第一項我們已經完成了,剩下的兩項就好辦了
所以代碼如下
//下拉框操作
//創建Select類的物件
Select s1 = new Select(driver.findElement(By.id("province")));
s1.selectByVisibleText("北京市");//option的文本內容
Thread.sleep(2000);
Select s2 = new Select(driver.findElement(By.id("city")));
s2.selectByIndex(1);//這個下拉框中第二個option 索引從零開始 0,1,2,3,4
Thread.sleep(2000);
Select s3 = new Select(driver.findElement(By.id("district")));
s3.selectByValue("110101");//option元素的value屬性值定位
代碼整合
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class AddAddress {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
LoginPage.loginWithUrl(driver, "test123", "123456");
driver.findElement(By.linkText("賬號設定")).click();
driver.findElement(By.linkText("修改默認識訓地址")).click();
driver.findElement(By.name("username")).sendKeys("1");
//下拉框操作
//創建Select類的物件
Select s1 = new Select(driver.findElement(By.id("province")));
s1.selectByVisibleText("北京市");//option的文本內容
Thread.sleep(2000);
Select s2 = new Select(driver.findElement(By.id("city")));
s2.selectByIndex(1);//這個下拉框中第二個option 索引從零開始 0,1,2,3,4
Thread.sleep(2000);
Select s3 = new Select(driver.findElement(By.id("district")));
s3.selectByValue("110101");//option元素的value屬性值定位
driver.findElement(By.name("address")).sendKeys("2");
driver.findElement(By.name("zip")).sendKeys("3");
driver.findElement(By.name("mobile")).sendKeys("4");
driver.findElement(By.className("btn3")).click();
}
}
運行截圖

網頁彈窗--警告框
創建class類 AddAddress2.java,把之前AddAddress.java的代碼復制,粘貼到2里面,
運行一次,我們可以發現網頁會有彈窗,顯示一些資訊,怎么去判斷是不是瀏覽器彈窗?右鍵無法檢查元素,

這里面,只能處理彈出的瀏覽器彈窗,其他不行
String result = driver.switchTo().alert().getText();
獲取網頁中的警告框的文本內容 賦值給變數 result
driver.switchTo().alert().accept();//確定
driver.switchTo().alert().dismiss();//取消
driver.switchTo().alert().sendKeys("");//輸入
瀏覽器出現了彈窗,我們要獲取彈窗里面的內容,然后把他放到變數result里面,用getText();
上面的操作呢彈出了一個視窗,只有“確定” 這一個操作,所以我們要用accept();
在添加這段代碼之前,我們要設定強制等待時間
Thread.sleep(2000);
//獲取網頁中的警告框的文本內容,賦值給變數result
String result = driver.switchTo().alert().getText();
//關閉彈窗
driver.switchTo().alert().accept();//確定
然后我們要進行輸出,輸出result的值,然后判斷有沒有添加成功,我們先手動測驗,添加正確的地址,會輸出操作成功的彈窗,所以用“操作成功”和result進行判斷

代碼整合如下
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import java.util.concurrent.TimeUnit;
public class AddAddress2 {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
LoginPage.loginWithUrl(driver, "test123", "123456");
driver.findElement(By.linkText("賬號設定")).click();
driver.findElement(By.linkText("修改默認識訓地址")).click();
driver.findElement(By.name("username")).sendKeys("1");
//下拉框操作
//創建Select類的物件
Select s1 = new Select(driver.findElement(By.id("province")));
s1.selectByVisibleText("北京市");//option的文本內容
Thread.sleep(2000);
Select s2 = new Select(driver.findElement(By.id("city")));
s2.selectByIndex(1);//這個下拉框中第二個option 索引從零開始 0,1,2,3,4
Thread.sleep(2000);
Select s3 = new Select(driver.findElement(By.id("district")));
s3.selectByValue("110101");//option元素的value屬性值定位
driver.findElement(By.name("address")).sendKeys("2");
driver.findElement(By.name("zip")).sendKeys("3");
driver.findElement(By.name("mobile")).sendKeys("4");
driver.findElement(By.className("btn3")).click();
Thread.sleep(2000);
//獲取網頁中的警告框的文本內容,賦值給變數result
String result = driver.switchTo().alert().getText();
//關閉彈窗
driver.switchTo().alert().accept();//確定
System.out.println(result);
if (result.equals("操作成功")){
System.out.println("添加地址成功");
}else {
System.out.println("添加地址失敗");
}
}
}
測驗輸出結果

多視窗測驗
首先,獲得首頁網址(http://localhost:8088/),然后我們去手動測驗一下,在當前首頁,我們點擊登錄,然后就會發現,網頁自動跳轉,然后多了一個視窗,


這里面呢,我們必須經過關閉視窗才能進行操作
關閉當前操作的視窗 driver.close();
然后使用回圈獲取,集合中的handle 賦值給s,集合中只有1個資料,回圈運行1次
for (String s : driver.getWindowHandles()) {
// s表示新視窗的handle 直接切換
driver.switchTo().window(s);
}
開始撰寫代碼,創建class類 SwitchWindow.java
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
public class SwitchWindow {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("http://localhost:8088/");
// 點擊登錄鏈接
driver.findElement(By.linkText("登錄")).click();
// 點擊鏈接彈出了新的標簽頁(瀏覽器視窗) 必須經過切換視窗才能操作
// 關閉當前操作的視窗
driver.close();
// 使用回圈獲取 集合中的handle 賦值給s 集合中只有1個資料,回圈運行1次
for (String s : driver.getWindowHandles()){
// s表示新視窗的handle 直接切換
driver.switchTo().window(s);
}
// 輸入用戶名
driver.findElement(By.id("username")).sendKeys("test123");
}
}
測驗截圖
滑鼠的移動懸停
在首頁這邊,我們把滑鼠懸停到某一個按鈕上面,然后我們會發現它自動會彈出一個擴展頁面,然后供我們去點擊,這里面,用findElement就會失效了,所以我們就可以使用Actions類里面的方法,Actions封裝了自動化selenium中所有的操作:單擊 雙擊 按住 拖拽 松開 右鍵 移動...
移動滑鼠,模擬滑鼠懸停在某個元素上,網頁中某些元素默認是隱藏的,必須把滑鼠移動到位置才能定位操作
Actions actions = new Action(driver);
actions.moveToElement(元素).perform();//把滑鼠移動到這個元素中間
click 單擊
doubleClick 雙擊
開始編碼,創建class類MoveMouse.java
在首頁,我們來查看一下該元素,是一個鏈接形式,用LinkText,我們可以嵌套,先findElement(),然后放到moveToElement()里面

actions.moveToElement(driver.findElement(By.linkText("手機、數碼、通訊"))).perform();
為了能更直觀的感受,我們添加強制等待時間
在手機這邊,也是鏈接形式,用LinkText,但不需要actions了,直接driver

代碼整合
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import java.util.concurrent.TimeUnit;
public class MoveMouse {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("http://localhost:8088/index.php");
Thread.sleep(2000);
Actions actions = new Actions(driver);
actions.moveToElement(driver.findElement(By.linkText("手機、數碼、通訊"))).perform();
Thread.sleep(2000);
// 點擊手機
driver.findElement(By.linkText("手機")).click();
}
}
測驗截圖--成功

網頁中大網頁套小網頁--框架
后臺網址(http://localhost:8088/index.php?m=admin&c=index&a=index&pid=1)
框架,在一個大網頁中嵌入小網頁,iframe或frame,根據右鍵有沒有此框架來判斷


在這種情況下,我們使用findElement就會找不到元素然后報錯,所以我們要切入,切入到框架內部,然后findElement
driver.switchTo().frame(0);//0 數字,切入網頁中第一個frame或iframe
driver.switchTo().frame("abc");//切入一個name或id的值是"abc"的frame/iframe元素中
driver.switchTo().frame(定位元素);定位到要切入的frame或iframe元素,直接寫入
切入之后再切回去
driver.switchTo().defaultContent();//回到最上級,默認最大的
driver.switchTo().parentFrame();//回傳上一級
開始操作,我們以后臺添加商品為例,進行實操
創建class類 SwitchFrame.java
后臺管理賬號:admin,密碼:password,驗證碼:1234
前置操作 登錄--略過
切入frame,在小網頁輸入框右鍵檢查,查看是什么框架名,由下圖可知iframe id = “mainframe”

driver.switchTo().frame("mainFrame");
最后,代碼整合
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
public class SwitchFrame {
public static void main(String[] args) throws InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("http://localhost:8088/index.php?&m=admin&c=public&a=login");
driver.findElement(By.name("username")).sendKeys("admin");
driver.findElement(By.name("userpass")).sendKeys("password");
driver.findElement(By.name("userverify")).sendKeys("1234");
driver.findElement(By.className("Btn")).click();
driver.findElement(By.linkText("商品管理")).click();
driver.findElement(By.linkText("添加商品")).click();
Thread.sleep(2000);//防止由于頁面記載沒有操作快, 無法找到frame元素
//切入frame中操作
driver.switchTo().frame("mainFrame");
driver.findElement(By.name("name")).sendKeys("蘋果充電寶");
}
}
測驗截圖

個人水平不足,文章中可能有所欠缺,也非常感謝您能看完,GOOD LUCK
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/379527.html
標籤:其他
上一篇:jdk8 Stream流式處理
