selenium webdriver定位方式

1、css定位:
2、xpath定位:




3、鼠標事件:


from selenium.webdriver.common.action_chains import ActionChains
#定位到要右擊的元素

qqq

=driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table

/tbody/tr/td[2]")

#對定位到的元素執行鼠標右鍵操作

ActionChains(driver).context_click(qqq).perform()



鼠標拖放操作的寫法:

#定位元素的原位置

element = driver.find_element_by_name("source")

#定位元素要移動到的目標位置

target = driver.find_element_by_name("target")
#執行元素的移動操作

ActionChains(driver).drag_and_drop(element, target).perform()  

4、pop()

pop() 定義和用法
pop() 方法用於刪除並返回數組的最後一個元素。
語法 :arrayObject.pop()
返回值 :arrayObject 的最後一個元素。
說明 :pop() 方法將刪除 arrayObject 的最後一個元素,把數組長度減 1,並且返回它刪除的元素的值。如果數組已經爲空,則 pop() 不改變數組,並返回 undefined 值。

#把頁面上最後1個checkbox的勾給去掉
dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
time.sleep(2)
dr.quit()

5、多層框架窗口定位

多層框架或窗口的定位:
     switch_to_frame()
     switch_to_window()

 #先找到到ifrome1(id = f1)
browser.switch_to_frame("f1")
#再找到其下面的ifrome2(id =f2)
browser.switch_to_frame("f2")
#下面就可以正常的操作元素了
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()  

6、下拉框定位:
# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
import os

dr = webdriver.Firefox()
file_path = 'file:///'+ os.path.abspath('level_locate.html')
dr.get(file_path)
#點擊Link1鏈接(彈出下拉列表)
dr.find_element_by_link_text('Link1').click()
#找到id爲dropdown1的父元素
WebDriverWait(dr,                 10).until(lambda                  the_driver:
the_driver.find_element_by_id('dropdown1').is_displayed())
#在父親元件下找到lin 爲Action的子元素
menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
#鼠標定位到子元素上
webdriver.ActionChains(dr).move_to_element(menu).perform()
time.sleep(2)

註釋:
WebDriverWait(dr,10)

10秒內每隔500毫秒掃描1次頁面變化,當出現指定的元素後結束。dr就不解釋了,前
面操作webdriver.firefox()的句柄

is_displayed()
該元素是否用戶可以見

classActionChains(driver)
driver 執行用戶操作實例webdriver
生成用戶的行爲。所有的行動都存儲在actionchains對象。通過perform()存儲的行爲。

move_to_element(menu)
移動鼠標到一個元素中,menu上面已經定義了他所指向的哪一個元素
to_element:元件移動到
perform()
執行所有存儲的行爲  

6、下拉框處理:

Select稱爲選擇類,主要使用場景在下拉菜單或者列表中,
from selenium.webdriver.support.select import  Select
from selenium.webdriver.common.action_chains import  ActionChains

例如:
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('http://www.baidu.com/')
t.sleep(3)
element=driver.find_element_by_link_text(u'設置')
ActionChains(driver).move_to_element(element).perform()
t.sleep(3)
driver.find_element_by_css_selector(".setpref").click()
select=Select(driver.find_element_by_id('nr'))
select.select_by_index(2)
driver.quit()

7、alert處理:
from selenium.webdriver.common.alert import Alert
#獲取alert彈出警告框的text
print driver.switch_to_alert().text
#接受警告框
driver.switch_to_alert().accept()

8、WebDriverWait類的介紹
111:element_to_be_clickable(locator)是等待頁面元素可見的時候操作,會設置一定範圍的時間,如果在時間範圍內,元素可見,就執行操作,元素不可見,就會引發TimeoutException的異常。
webdriver提供WebDriverWait類和expected_conditions模塊來執行一個顯式的等待
from selenium.webdriver.support.ui import  WebDriverWait
from selenium.webdriver.support import expected_conditions
例子:
driver.get('http://www.baidu.com')
so=WebDriverWait(driver,10).until(expected_conditions.element_to_be_clickable((By.ID,'kwkw')))
so.send_keys('appium')
222:
text_to_be_present_in_element(locator,text)是指定頁面元素的文本位置,一般用於驗證一個文本信息或者錯誤的信息
例子:
WebDriverWait(driver,10).until(expected_conditions.text_to_be_present_in_element((By.CSS_SELECTOR,"#TANGRAM__PSP_8__error"),u'請您填寫手機/郵箱/用戶名'))
333:
visibility_of_element_located(locator)是元素可見後再執行其他的操作
例子:
element=WebDriverWait(driver,10).until(expected_conditions.visibility_of_element_located((By.XPATH,".//*[@id='lh']/a[3]")))
print element.text
driver.quit()
444:
implicitly_wait()方法是隱式等待,用來設置超時,一般把implicitly_wait()方法調用在加載測試地址後,等待所測試的  應用程序加載,這樣就會有一個緩充的過程
例子:
driver.implicitly_wait(30)
555:
WebDriverWait()是顯式等待,也就是說會明確等待的時間
例子:
locator=WebDriverWait(driver,10).until(expected_conditions.visibility_of_element_located((By.ID,'kw')))
locator.send_keys('appium')
driver.quit()
9、ActionChains類的介紹
111:move_to_element()方法可以理解爲懸停
例子:
locator=driver.find_element_by_link_text(u'設置')
ActionChains(driver).move_to_element(locator).perform()

222:context_click()是右擊,一般右擊後,會彈出刪除分享等
例子:
content=driver.find_element_by_xpath(".//*[@id='yao-main']/div/div[4]/div[1]/div[2]/div/div[1]/div[1]/span/span")
ActionChains(driver).context_click(content).perform()

333:double_click()是雙擊元素
double_click()是雙擊元素,一般使用在有數據交互的地方比較合理,如點擊一個按鈕,點擊以下按鈕,會往數據庫insert一條數據,如果開發未屏蔽雙擊,雙擊下,那麼意味着insert二條數據
例子:
double=driver.find_element_by_id('su')
ActionChains(driver).double_click(double).perform()

444:click_and_hold()指的是按住鼠標左鍵在源元素上,點擊並且不釋放
例子:
hold=driver.find_element_by_id('su')
ActionChains(driver).click_and_hold(hold).perform()
driver.quit()

release()值鼠標釋放,在調用click_and_hold()方法的時候,鼠標並沒有釋放,可以執行release()方法,這樣鼠標可以得到釋放
例子:
ActionChains(driver).click_and_hold(hold).release()


555:send_keys()是模擬鍵盤事件,如按下F5刷新鍵等,切記需要導入Keys類
from selenium.webdriver.common.keys import Keys
so.send_keys(Keys.SPACE)

9、js事件:通過execute_script()調用js
例子:
 js="var q=document.documentElement.scrollTop=10000"
     self.driver.execute_script(js)
富文本的處理:
def richText(content):
      js='document.getElementById("ueditor_0").
     contentWindow.document.body.innerHTML="%s"' %(content)
     driver.execute_script(js)

時間控件的處理:
<input id="dp1448375755034" class="text-box hasDatepicker" type="text" style="cursor:pointer;" readonly="readonly" title="開始時間≥當前時間" placeholder="開始時間≥當前時間" value="" name="act_start_time">
下來要實現的就是在開始時間和結束時間選擇時間,實現的方式思路爲:
1、取消日期控件的readonly屬性,
2、給value賦值,
3、寫js代碼來實現如上的1,2點,再webdriver對js進行處理
startJs=js1="$(\"input[placeholder='開始時間≥當前時間']\").removeAttr('readonly');$(\"input[placeholder='開始時間≥當前時間']\").attr('value','2014-08-10 12:00:00')"
stopTime="$(\"input[placeholder='結束時間>開始時間']\").removeAttr('readonly');$(\"input[placeholder='結束時間>開始時間']\").attr('value','2014-08-1013:16:00')"

對視頻的控制:
在視頻網站中,怎麼可以實現對視頻進行自動化的控制播放和暫停了?我們可以利用html5中的video元素來實現,<video>標籤是定義視頻,比如電影片或者其他視頻流。對於自動化的控制視頻的播放,暫停,我們通過獲取<video>元素,獲取到它的ID,然後獲取視頻的播放源進行確認,最後通過js控制視頻的播放,暫停。我們已http://www.videojs.com/爲實例說明,打開鏈接地址後,就會看到一個視頻,我們看視頻的源碼,源碼見如下:
<video id="preview-player_html5_api" class="vjs-tech" data-setup="{}" poster="http://video-js.zencoder.com/oceans-clip.png" preload="auto">
<source type="video/mp4" src="http://video-js.zencoder.com/oceans-clip.mp4"></source>
<source type="video/webm" src="http://video-js.zencoder.com/oceans-clip.webm"></source>
<source type="video/ogg" src="http://video-js.zencoder.com/oceans-clip.ogv"></source>
<p class="vjs-no-js">
To view this video please enable JavaScript, and consider upgrading to a web browser that
<a target="_blank" href="http://videojs.com/html5-video-support/">supports HTML5 video</a>
</p>
</video>

代碼例子:
video=driver.find_element_by_id('preview-player_html5_api')
js="return arguments[0].currentSrc"
driver.execute_script(js,video)
t.sleep(10)
#視頻的播放
driver.execute_script("return arguments[0].play()",video)
t.sleep(3)
#視頻的暫停
driver.execute_script("arguments[0].pause()",video)
t.sleep(3)

10、順序執行用例
if __name__=='__main__':
    suite=unittest.TestSuite()
    suite.addTest(baiduPage('test_001'))
    suite.addTest(baiduPage('test_002'))
    suite.addTest(baiduPage('test_003'))
    unittest.TextTestRunner(verbosity=2).run(suite)

#優選
if __name__=='__main__':
suite=unittest.TestSuite(unittest.makeSuite(baiduPage))
unittest.TextTestRunner(verbosity=2).run(suite)

利用makeSuite方法,就不需要擔心有多少個case了,只需要把測試的類傳入即可,測試代碼部分,還需要重構嗎?當然,生命不息,重構不息。把測試套件代碼進行重構(suite=unittest.TestSuite(unittest.makeSuite(baiduPage))),編寫成一個靜態方法suite,見重構後的方法和調用:
@staticmethod
def suite():
    suite=unittest.TestSuite(unittest.makeSuite(baiduPage))
return suite
if __name__=='__main__':
unittest.TextTestRunner(verbosity=2).run(baiduPage.suite())


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章