1. 程式人生 > >使用CSS選擇器定位頁面元素

使用CSS選擇器定位頁面元素

  之前總結了使用ID,Name,Xpath等方式來定位頁面元素,其實CSS選擇器也是一個非常好用的定位元素的方法,甚至比Xpath強大。在自動化裡我們用CSS選擇器來定位頁面元素一定要牢記一個準則:唯一定位,通常使用CSS選擇器修改樣式時會盡量多的選擇元素,但是,在自動化裡,必須要唯一定位到元素,否則自動化很可能因為找不到頁面元素而失敗。CSS選擇器有很多,像標籤選擇器、類選擇器、ID選擇器、關係選擇器、偽類選擇器、分組選擇器等等,但是隻需要掌握常用的幾種就可以滿足定位元素的需求。

以下述HTML為例,總結下CSS選擇器的用法:

<div id="menu" class="menu" title="menu">  
    <ul>  
        <li id="first" class="catagory book">  
            <a id="book"></a>  
        </li>  
        <li id="second" class="catagory food">  
            <a id="food"></a>  
        </li>  
        <li>  
            <a id="clothes"></a>  
        </li>  
        <li title="submenu">  
            <a id="furniture"></a>  
        </li>  
    </ul>  
    <a href="....">Welcome to Our Store</a>  
</div> 

1. 標籤選擇器

使用HTML標籤來選擇元素,例如: 

driver.findElement(By.cssSelector("li"));   //將選擇所有li元素

driver.findElement(By.cssSelector("a")); //將選擇所有a元素

2. 類選擇器

使用類名來選擇元素,使用方法:.class, 例如:

driver.findElement(By.cssSelector("div.menu")); //將選擇class為menu的div元素driver.findElement(By.cssSelector(".catagory")); //將選擇id為first的元素和id為second的元素,因為這兩個元素

的class裡都含有catagory

3. ID選擇器

使用ID來選擇元素,使用方法:#id,例如:

driver.findElement(By.cssSelector("a#clothes")); //將選擇id為clothes的a元素

也可以寫成:

driver.findElement(By.cssSelector("#clothes")); //因為id是唯一的所以還是會選擇id為clothes的a元素

3. 關係選擇器

a.div,p 作用:選擇所有div元素和p元素

b.div>p 作用:選擇div的直接子元素中的所有p元素

c. div p   作用:選擇div的後代元素中的所有p元素

4. 屬性選擇器

a. [title]   作用:選擇所有具有title屬性的元素

b. [title='menu']   作用:選擇所有title屬性值等於'menu'的元素

c. [title~='menu']   作用:選擇所有title屬性值包含menu的元素,注意:menu必須是一個word,

且有空格與其他單詞分開

d. [title*='menu']   作用:選擇所有title屬性值包含menu的元素,注意:此時menu為substring,而不是word

e. [title|='menu']   作用:選擇所有title屬性值以menu開頭或者等於menu的元素

f. [title^='menu']   作用:選擇所有title屬性值以menu開頭的元素

g. [title$='menu']   作用:選擇所有title屬性值以menu結尾的元素

h. div[title='menu']   作用: 選擇所有title屬性值等於menu的div元素

4. 通用選擇器

方法:*

例如: div ul *; //選擇div ul 下的所有子元素,包括li和a元素

5. 偽類選擇器

偽類選擇器很多,只總結下用過的:nth-child(n)

例如:p:nth-child(2) 作用:選擇作為第二孩子的p元素