Web頁面有很多特殊的元素 無法使用基本的元素定位方式定位,下面介紹幾個特殊的元素定位
1、alert框
alert框只有一個確認按鈕
BrowserUtil是一個封裝好的瀏覽器啟動類
BrowserUtil.driver.findElement(By.id("abtn")).click();
Thread.sleep(3000);
Alert alert = BrowserUtil.driver.switchTo().alert();
alert.accept(); //點擊確認按鈕
alert.dismiss();//彈框消失
2、confirm框
confirm框有確定和取消按鈕
Alert alert = BrowserUtil.driver.switchTo().alert();
alert.accept(); //點擊確定按鈕
alert.dismiss();//點擊取消按鈕
confirm框和alert框使用方法一樣
3、div類型的彈框
4、Iframe切換
如何確認定位的是元素是否存在iframe,例如在chrome瀏覽器檢查元素時,以下2個標識可以確認是iframe
iframe定位思路:
1)先定位到第一個元素
2)使用格式switchTo().frame()方法轉到frame再定位
BrowserUtil.driver.switchTo().frame("bframe");
3)多層嵌套繼續使用第2)條的方法
4)回到原來的第一個主頁面中
BrowserUtil.driver.switchTo().defaultContent();
5、radio/checkbox 單選/復選框
使用普通定位元素的方法就可以了,用click()方法點擊,用isSelected()方法判斷是否選中
復選框多選,定位多個元素依次點擊就可以了
6、select 選擇框
下拉選擇框可以單選也可以多選,具體使用如下:
7、時間日期控件
1)時間控件支持輸入框輸入日期,按正常的元素定位sendKeys輸入日期即可
2)時間控件輸入不支持輸入日期時,查看該元素可發現,該屬性有readonly,只可讀不可寫,例如12306的時間控件
此時需要在Selenium里面執行javaScript代碼,把該屬性去掉后,再按照正常的元素定位方式,sendKeys輸入日期,具體代碼如下:
JavascriptExecutor javascriptExecutor = (JavascriptExecutor)BrowserUtil.driver;
javascriptExecutor.executeScript("document.getElementById('train_date').removeAttribute('readonly')");
在檢查元素console控制台輸入document.getElementById('train_date'),可以找到該輸入框,removeAttribute('readonly')表示要移動該屬性的readonly值,只時該輸入框就可以輸入日期了
注意: 因只讀控件有默認的時間,需要先清除再輸入日期,否則時間會重疊顯示
8、JavaScript滾動元素到頁面某一區域
代碼如下:
JavascriptExecutor javascriptExecutor = (JavascriptExecutor)BrowserUtil.driver;
javascriptExecutor.executeScript("document.getElementById('index_ads').scrollIntoView()");
scrollIntoView()-->滾動到可視區域的最上方
scrollIntoView(0)-->滾動到可視區域的下方
9、通過參數的傳遞滾動
1)單個元素傳遞
2)多個元素傳遞
10、懶加載 頁面有一部分元素默認沒有加載出來
操作如下圖
11、拖 拽
Actions鼠標事件還有很多其它的方法,可以依次試下
12、文件上傳
先定位到文件上傳按鈕 元素 ,並輸入文件路徑