Selenium實(shí)戰(zhàn)教程系列(二)---元素定位

Selenium webdriver能夠模擬人對(duì)瀏覽器進(jìn)行操作的前提是界面元素的定位。元素的定位可以說(shuō)是Selenium自動(dòng)化腳本的基礎(chǔ)。這一小節(jié)筆者將介紹如何在selenium中進(jìn)行元素的定位。

定位元素的方法

Selenium中提供了以下定位元素的方法:
首先看一個(gè)HTML文件 test_page.:

<html>
    <body>
        <form class="form-test" name="register" action="success.html" method="post">
    <h3>注冊(cè)賬號(hào)</h3>
    <a href="/home">Home Page</a>
    <table bgcolor="aqua">
        <tr>
            <td>昵稱:</td>
            <td><input id="input username" type="text" name="username" class="input"></td>
        </tr>
        <tr>
            <td>密碼:</td>
            <td><input type="text" name="password"></td>
        </tr>
        <tr>
            <td>確認(rèn)密碼:</td>
            <td><input type="text" name="confPassword"></td>
        </tr>
        <tr>
            <td>性別:</td>
            <td>
                <input type="radio" name="sex" value="man" checked>男
                <input type="radio" name="sex" value="woman">女
                </td>
            </tr>
        </table>
    </form>
    </body>
 </html>

1. id

通過(guò)元素的id來(lái)完成username輸入框的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by id
dr.find_element(:id, 'input username').click

2.name

通過(guò)元素的name屬性來(lái)完成對(duì)username輸入框的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by name
dr.find_element(:name, 'username').click

3. class name

通過(guò)元素的class屬性來(lái)完成對(duì)username輸入框的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by name
dr.find_element(:class, 'input').click

4. link text和partial link text

通過(guò)鏈接元素的text屬性來(lái)完成Home Page鏈接的定位。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by link_text
link_text = dr.find_element(:link_text, 'Home Page').get_text
puts link_text

# by partial_link_text
link_text = dr.find_element(:partial_link_text, 'Home').get_text
puts link_text

5. tag name

通過(guò)標(biāo)簽的name來(lái)完成header元素的定位

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by tag name
header_text = dr.find_element(:tag_name, 'h3').get_text
puts header_text

6. xpath

xpath是用來(lái)定位HTML文檔中元素的通用方法,有一套自己的語(yǔ)法規(guī)則,支持各種函數(shù),可以說(shuō)是一種最全面的定位方法。我在開(kāi)發(fā)Selenium自動(dòng)化用例的過(guò)程中,最多使用的就是xpath。
這里只用簡(jiǎn)單的例子說(shuō)明xpath的定位使用,具體的xpath的使用將在另外的專題中介紹。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by xpath
dr.find_element(:xpath, "http://tr/td/input[@value='women']").click

7. css selector

css selector和xpath一樣,也是功能非常強(qiáng)大的定位方法。但是與xpath不同,css selector只能支持向后定位,而xpath可以支持向前和向后定位。
下面的例子講展示如何用css selector定位xpath例子中的同一個(gè)元素。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# by css selector
dr.find_element(:css, "tr>td>input[value='women']").click

定位一組元素

Selenium中支持同時(shí)獲取一組元素的定位,這在處理多選項(xiàng)選擇,或者表格元素的時(shí)候非常有用。

require 'selenium-webdriver'
dr = Selenium::WebDriver.for :chrome
dr.get "http://test.html"

# Get number of items
num_of_tds = dr.find_elements(:tag_name, "td").count
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇文章在介紹官網(wǎng)的同時(shí)使用了比較多的腳本示例,示例里遇到的問(wèn)題有部分在本篇文章進(jìn)行了解釋,還有一篇文章專門記錄了...
    顧顧314閱讀 13,082評(píng)論 3 32
  • 洞見(jiàn)SELENIUM自動(dòng)化測(cè)試 寫在最前面:目前自動(dòng)化測(cè)試并不屬于新鮮的事物,或者說(shuō)自動(dòng)化測(cè)試的各種方法論已經(jīng)層出...
    厲鉚兄閱讀 6,832評(píng)論 3 47
  • 摘要: 之前用Selenium做UI自動(dòng)化測(cè)試從初學(xué)到熟練碰到過(guò)很多問(wèn)題,這里就不一一細(xì)說(shuō)了,所以把最基本的操作都...
    Vicky_習(xí)慣做唯一閱讀 11,626評(píng)論 1 23
  • 那些年的爸爸和媽媽還很年輕,那時(shí)的我們還很小什么也不懂。好像覺(jué)得世界就這么小,自己生活的圈子也很小,或許那時(shí)...
    moshanghuakai閱讀 624評(píng)論 2 5
  • 當(dāng)我第一次翻開(kāi)《富蘭克林傳》時(shí)我以為我會(huì)看到一位神一樣的偉人的一生,還有一個(gè)個(gè)波瀾壯闊的傳奇故事。然而讀過(guò)之后我忽...
    舒哲小義閱讀 448評(píng)論 0 2

友情鏈接更多精彩內(nèi)容