1. 程式人生 > >自動化測試腳本-帳號註冊到激活

自動化測試腳本-帳號註冊到激活

也有 ner sele log 窗口 tab 定位 header t對象

在https://www.oschina.net/(開源中國)網站使用郵箱註冊,登錄QQ郵箱激活註冊帳號:

#coding=utf-8
from selenium import webdriver

#用谷歌瀏覽打開https://www.oschina.net/
drvier=webdriver.Chrome()
drvier.get(https://www.oschina.net/)

#瀏覽器在全屏幕模式下執行2
drvier.maximize_window()

#點擊註冊
drvier.find_element_by_xpath(/html/body/header/div/div[2]/div/a[2]
).click() #使用郵箱註冊 drvier.find_element_by_xpath(/html/body/section/div/div/div[1]/nav/span[2]/span).click() #輸入郵箱 drvier.find_element_by_xpath(//*[@id="userMail"]).send_keys(‘******) #輸入昵稱 drvier.find_element_by_xpath(//*[@id="mail_logon"]/div/div[2]/div[1]/input).send_keys(******) #輸入密碼 drvier.find_element_by_xpath(
//*[@id="mail_logon"]/div/div[3]/div[1]/input).send_keys(‘******) #再次輸入密碼 drvier.find_element_by_xpath(//*[@id="mail_logon"]/div/div[4]/div[1]/input).send_keys(‘******) #手動輸入驗證碼 number=input(請輸入驗證碼:) drvier.find_element_by_xpath(//*[@id="mail_logon"]/div/div[5]/div[1]/input).send_keys(number) #選擇性別 drvier.find_element_by_xpath(
//*[@id="mail_logon"]/div/div[6]/div/div[2]/label).click() #同意協議 drvier.find_element_by_xpath(//*[@id="mail_logon"]/div/div[7]/div[1]/input).click() #點擊註冊 drvier.find_element_by_xpath(//*[@id="mail_logon"]/div/div[8]/button).click()
#訪問QQ郵箱 drvier.get(
https://mail.qq.com/) #切換到iframe(id=‘login_frame‘) drvier.switch_to.frame(login_frame)
#登錄QQ郵箱激活開源中國社區 drvier.find_element_by_xpath(//*[@id="u"]).send_keys(******) drvier.find_element_by_xpath(//*[@id="p"]).send_keys(******) drvier.find_element_by_xpath(//*[@id="login_button"]).click() #切換到iframe(id=‘mainFrame‘) drvier.implicitly_wait(3) drvier.switch_to.frame(drvier.find_element_by_xpath(//*[@id="mainFrame"])) #點擊收件箱 drvier.find_element_by_xpath(//*[@id="folder_1"]).click() #點擊激活郵件 drvier.find_element_by_xpath(//*[@id="div_showtoday"]/table/tbody/tr/td[3]/table/tbody/tr/td[3]/div[1]/u).click() #獲得激活鏈接窗口句柄 jh_windows=drvier.current_window_handle #點擊激活鏈接 drvier.find_element_by_xpath(//*[@id="mailContentContainer"]/table/tbody/tr[3]/td/p[2]/a).click() #獲得當前所有打開的窗口的句柄 all_handles = drvier.window_handles #獲得繼續訪問窗口句柄 for handle in all_handles: if handle != jh_windows: drvier.switch_to.window(handle) #點擊繼續訪問 drvier.find_element_by_xpath(/html/body/div/div[2]/div[2]/a[1]).click()

問題一:剛開始在定位昵稱、密碼、驗證碼、性別、協議、註冊元素時,提示:element not visible ,原因是由於頁面上有兩個結構類似的元素(用手機註冊也有這些元素),因為這個定義對“手機註冊”元素也同樣適用,而且“手機註冊”元素的位置在前面,所以就會出現element not visible。

解決方法:使用全路徑的xpath(或者是往前定位,直到能區分出元素1和元素2)。

問題二:在登錄頁面定位用戶名和密碼時,提示:NoSuchElementException: Message: Unable to locate element,原因是由於嵌套了iframe框架WebDriver 每次只能在一個頁面上識別元素,對於iframe 嵌套內的頁面上的元素,直接定位是定位是定位不到的。

解決方法:selenium提供了switch_to.frame()方法來切換frame,括號裏的內容可以傳入id、name、index以及selenium的WebElement對象。

通常采用id和name就能夠解決絕大多數問題。但有時候frame並無這兩項屬性,則可以用index和WebElement來定位:

  • index從0開始,傳入整型參數即判定為用index定位,傳入str參數則判定為用id/name定位;
  • WebElement對象,即用find_element系列方法所取得的對象,我們可以用tag_name、xpath等來定位frame對象。

問題三:在用“find_element_by_class_name()”方法定位元素屬性class="c-footer-a1 btn_blue"時,提示:invalid selector: Compound class names not permitted,原因是由於class屬性存在空格,

解決方法:換成CSS 定位或者其他方式定位。

問題四:在最後點擊繼續訪問按鈕時,提示:NoSuchElementException: Message: Unable to locate element,原因是由於沒有定位到當前窗口。

解決方法:

  • current_window_handle 獲得當前窗口句柄
  • window_handles 返回的所有窗口的句柄到當前會話
  • switch_to_window() 用於切換到相應的窗口,與上一節的switch_to_frame() 是類似,前者用於不同窗口的切換,後者用於不同表單之間的切換。

自動化測試腳本-帳號註冊到激活