java+selenium——查找定位元素,以及對瀏覽器窗口的簡單操作


 

 

package rjcs;
import org.openqa.selenium.firefox.FirefoxDriver;
public class qhjb 
{
        public static void main(String[] args)
        
        {
             System.setProperty("webdriver.firefox.bin","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");    //設置火狐的安裝路徑,防止系統找不到
                
             FirefoxDriver driver = new FirefoxDriver();        //初始化FireFox瀏覽器實例,並打開瀏覽器
             
            try
            {
                 driver.manage().window().maximize();         //最大化窗口
                 
                 Thread.sleep(5000);        

            
                 driver.get("https://www.baidu.com");                    //打開一個網址,方法一

                 //driver.findElementByLinkText("地圖").click();    //通過連接文字打開地圖
                 
                 boolean a= driver.findElementById("kw").isDisplayed();      //是否看見
                 System.out.println("元素是否可見:"+a);
                 
                 boolean b= driver.findElementById("kw").isEnabled();   //是否可編輯操作
                 System.out.println("元素是否編輯:"+b);
                 
                 String s = driver.findElementById("kw").getTagName();         //查看標簽名字
                 System.out.println("kw標簽名字:"+s);    
                 
                 String w = driver.findElementById("su").getTagName();        //查看標簽名字
                 System.out.println("su標簽名字:"+w);    
                 
                 String p = driver.findElementById("kw").getAttribute("class");        //用於獲取元素的屬性值
                 System.out.println("kw的class屬性值名字:"+p);    
                 
                 
                 String g = driver.findElementByPartialLinkText("圖").getText();
                 System.out.println("連接文字 地圖 的 文本值:"+g);    
                 
            
                 Thread.sleep(10000);
                 driver.findElementById("kw").sendKeys("中國");
                 Thread.sleep(10000);
                 driver.findElementById("kw").clear();
                 Thread.sleep(10000);
                 driver.findElementById("kw").sendKeys("美國");
                 driver.findElementById("su").click();

                 Thread.sleep(10000);
                 
                 
            }catch (Exception e) 
            {
                e.printStackTrace();
            }finally 
            {
                driver.quit();
            
             }
       }    
    
    
}

 

執行結果:

 

元素是否可見:true
元素是否編輯:true
kw標簽名字:input
su標簽名字:input
su標簽名字:s_ipt
連接文字 地圖 的 文本值:地圖

 

 ====================================================================================================================

package rjcs;

import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;

import org.openqa.selenium.firefox.FirefoxDriver;

public class njcsxdy 
{
    
    
    public static void main(String[] args)
    
    {
         System.setProperty("webdriver.firefox.bin","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");    //設置火狐的安裝路徑,防止系統找不到
            
         FirefoxDriver driver = new FirefoxDriver();        //初始化FireFox瀏覽器實例,並打開瀏覽器
         
        try
        {
             driver.manage().window().maximize();         //最大化窗口
             
             Thread.sleep(5000);        

             Dimension targetSize = new Dimension(300,500);  //設置窗口大小為1024*768
             driver.manage().window().setSize(targetSize);
             System.out.println(driver.manage().window().getSize());  //獲取窗口的大小
             
             Thread.sleep(5000);
             
             Point targetPosition01 = new Point(300, 600);       //設置窗口左上角那個點出現的位置為(300,600)
             driver.manage().window().setPosition(targetPosition01);
             System.out.println(driver.manage().window().getPosition());
             
             
             Thread.sleep(5000);
             
             
             Point targetPosition02 = new Point(600, 800);       //設置窗口左上角那個點出現的位置為(600,800)
             driver.manage().window().setPosition(targetPosition02);
             System.out.println(driver.manage().window().getPosition());
             
             
             Thread.sleep(5000);             
             
             
             
             driver.manage().window().maximize();         //最大化窗口
             
             Thread.sleep(5000);
        
             driver.get("https://www.baidu.com");                    //打開一個網址,方法一

             //driver.findElementByLinkText("地圖").click();    //通過連接文字打開地圖
             
             boolean a= driver.findElementById("kw").isDisplayed();      //是否看見
             System.out.println("元素是否可見:"+a);
             
             boolean b= driver.findElementById("kw").isEnabled();   //是否可編輯操作
             System.out.println("元素是否編輯:"+b);
             
             String s = driver.findElementById("kw").getTagName();         //查看標簽名字
             System.out.println("kw標簽名字:"+s);    
             
             String w = driver.findElementById("su").getTagName();        //查看標簽名字
             System.out.println("su標簽名字:"+w);    
             
             String p = driver.findElementById("kw").getAttribute("class");        //用於獲取元素的屬性值
             System.out.println("kw的class屬性值名字:"+p);    
             
             
             String g = driver.findElementByPartialLinkText("圖").getText();
             System.out.println("連接文字 地圖 的 文本值:"+g);    
             
        
             Thread.sleep(10000);
             driver.findElementById("kw").sendKeys("中國");
             Thread.sleep(10000);
             driver.findElementById("kw").clear();
             Thread.sleep(10000);
             driver.findElementById("kw").sendKeys("美國");
             driver.findElementById("su").click();

             Thread.sleep(10000);
             
             driver.navigate().to("https://www.ifeng.com");    //此頁面打開新頁面
             
             Thread.sleep(10000);
             
             driver.navigate().back();              //后退
             
             Thread.sleep(10000);
             
             driver.navigate().forward();           //前進
            
             Thread.sleep(10000);
             
             driver.navigate().refresh();           //刷新當前頁
             
             Thread.sleep(10000);
             
             
        }catch (Exception e) 
        {
            e.printStackTrace();
        }finally 
        {
            driver.quit();
        
         }
   }    
    
    
    

}

 

 

 

執行結果:

 

(300, 500)
(300, 600)
(600, 800)
元素是否可見:true
元素是否編輯:true
kw標簽名字:input
su標簽名字:input
kw的class屬性值名字:s_ipt
連接文字 地圖 的 文本值:地圖

 

 

 

 

 

 

 

 

=====================================================================================================================

 

 

(1)、標准寫法
標准寫法為//標簽名[@屬性名="屬性值"],比如我們要找那個title為搜索熱點的元素,則xpath就是這樣寫//div[@title='搜索熱點'](這里屬性值用單引號或者雙引號都可以,//這個意思是從全局元素始中查找);

 

 

(2)、獲取父元素
獲取父元素,xpath語句中要加個/..即可,so要多級父元素,就多加幾個即可,比如我們要獲取上圖中最上面那個div元素,其xpath可以這樣寫//div[@title='搜索熱點']/../../..;

 

 

(3)、獲取兄弟元素
獲取兄弟元素,這個就可以先定位到其父元素,再下級尋找,比如上圖黃色標識那個元素,xpath就可以這樣寫//div[@title='搜索熱點']/../table;

 

 

(4)、多屬性方式定位
有時候我們用單一屬性進行查找還是會有重復的元素,那么怎么辦呢,其實屬性我們可以加多個,譬如上圖中那個a標簽元素,其xpath就可以這樣寫//a[@title='謝霆鋒山寨歌迷會'][text()='謝霆鋒山寨歌迷會'],注意那個[text()='謝霆鋒山寨歌迷會']為text的專有寫法;

 

 

(5)、獲取子元素
子元素獲取,子元素的話就比較簡單了,可以直接在元素后加[n]就可以了,譬如要獲取上圖中第二個td標簽的元素,則xpath可以寫為//a[@title='謝霆鋒山寨歌迷會'][text()='謝霆鋒山寨歌迷會']/../../../td[2],注意這個td[2]中的2即為其編號,這里編號都是從1開始,如果是第一個td則可以不用加后邊那個[1];

其實有個簡單方法,即在chrome的開發者工具中,選中要定位的元素,右鍵選擇copy Xpath就可以獲取到其xpath,只是有時候這個xpath會很長…所以建議還是自己寫比較好;
以上那5中方法是可以靈活配合使用的。

 

 

8、通過css選擇器查找
與通過xpath查找類似,這個也可以直接在chrome中點擊要定位的元素右鍵選擇cssSelector來獲取其css選擇器,不過和xpath一樣有時候會很長…不如自己寫的簡單(需要注意的是css選擇器方式有時候寫起來比xpath要簡單許多,建議這個好好學習下);

 

 

 

這部分詳細教程可以參考這個鏈接:http://www.w3school.com.cn/cssref/css_selectors.asp

 

 

 

 

========================================================================================================================

 

 


下面簡單講下常用方法:

(1)、通過id方式


這里的selector可以寫為#id_value或者帶tag名稱的方式tag_name#id_value,其中tag_name為類似div這種,id_value則是該元素的id屬性的值;

 

 

(2)、通過class方式
此處selector可以寫為.class_value或者帶tag名稱的方式tag_name.class_value,此處的class_value為元素的class屬性的value值;

 

 

(3)、通過其他屬性的方式
此處selector可以寫為[attr_name="attr_value"]或者[attr_name='attr_value'],此種方式也可以帶個tag名稱,直接加在中括號前面即可;

 

 

(4)、通過tag_name的方式
此處selector寫法為tag_name,這樣可以直接獲取到所有標簽名為tag_name的元素,結果同tagName查找方式;

 

 

(5)、通過路徑方式
此處selector寫法為tag_name>tag_name,當然tag_name可以帶屬性,路徑可以有多層;

 

 

如上幾種方式可以配合使用;

 

 

 

 

===============================================================================================================

 

 

三、元素的基本操作


1、點擊
代碼為element.click(),此操作用於所有可以點擊的操作,注意不能點擊的元素用click操作會拋異常;

 

2、清除
代碼為element.clear(),此操作用於input輸入框,在輸入字符串之前建議先clear下,以避免有數據導致內容輸入異常;

 

3、發送數據
代碼為element.sendKeys(keys),此操作用於input輸入框;

 

4、提交數據
代碼為element.submit(),此操作常用於form元素塊兒的提交按鈕,一般和發送數據配合使用,登錄框比較常見;

 

5、獲取屬性
代碼為element.getAttribute(attr_key),用於獲取元素的屬性值,attr_key為屬性的key值;

 

6、獲取css值
代碼為element.getCssValue(css_key),用於獲取元素的某個css值,css_key為css屬性名稱;

 

7、獲取位置
代碼為element.getLocation(),用於獲取元素的位置信息,即該元素左上角在整個瀏覽器中的坐標;

 

8、獲取大小
代碼為element.getSize(),用於獲取元素的大小信息,即該元素的長和寬信息,常用於元素截圖,和獲取位置配合使用,可以獲取元素塊兒其他三個點的坐標;

 

9、獲取tag_name
代碼為element.getTagName();,用於獲取元素的tag名稱;

 

10、獲取內容
代碼為element.getText(),用於獲取元素的text的值;

 

11、查找元素
代碼為element.findElement(By),用於根據以該元素為原點獲取元素,此處不太常用;

 

12、是否顯示
代碼為element.isDisplayed(),返回該元素是否顯示,對應元素的這個屬性style="display: block;";

 

13、是否enable
代碼為element.isEnable(),常用於單選框等;

 

14、是否被選擇
代碼為element.isSelected(),此項用於select元素塊兒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM