日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python3--selenium--unittest。長時(shí)間未使用,編寫UI

系統(tǒng) 1705 0

前言:自動(dòng)化測試存在比較多的使用限制,會(huì)存在某段時(shí)間無法使用的生疏期。通過這篇文章記錄項(xiàng)目編寫程序中遇到的問題以及解決思路,希望對以后的自動(dòng)化開發(fā)能有些幫助。

本篇記錄5個(gè)問題:

問題6:獲取列表中,整行整列數(shù)據(jù)的方法

問題7:數(shù)據(jù)無法獲取眾多原因之一:列表中同一位置元素,html格式不同。

問題8:for循環(huán)與try使用錯(cuò)誤

問題9:確認(rèn)網(wǎng)頁是否打開的方法之一:使用title

問題10:selenium操作下拉選項(xiàng)內(nèi)容

?

問題6:獲取列表中,整合整理額數(shù)據(jù)的方法:

? ? ? ? 操作網(wǎng)頁中,經(jīng)常會(huì)出現(xiàn)列表,如果使用selenium獲取一個(gè)列表的所有數(shù)據(jù)。目前可行的方法核心是For循環(huán)+Xpath路徑。

1.? 獲取整個(gè)表單tbody的xpath路徑:list = driver.find_element_by_xpath("http://*[@id="***"]/tbody")

2. 獲取有效數(shù)據(jù)第一行,第一列的數(shù)據(jù): test_click = list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[1]/td[1]/b")。這一步實(shí)際上可以不應(yīng)用list,引用list能夠?qū)⒎秶s小到特定的列表。如果頁面只有一個(gè)列表,則不需要獲取list

3. 獲取有效數(shù)據(jù)第二行,第一列的數(shù)據(jù):test_click2 =?list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[2]/td[1]/b")

4. 獲取有效數(shù)據(jù)第一行,第二列的數(shù)據(jù):test_click3 = list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[1]/td[2]/b")

按照規(guī)律,如果想要獲取某個(gè)特定列的數(shù)據(jù)則:

test_list = []

for?i?in range(1,最大列個(gè)數(shù)):

? ? test_list.append(list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[{}]/td[1]/b".format(i)))

取特定行也類似。

?

問題7:數(shù)據(jù)無法獲取眾多原因之一:列表中同一位置元素,html格式不同。

? ? ? ?html頁面中部分字段由于顯示內(nèi)容不同,html中的名稱內(nèi)容也不同。selenium如果不做處理,就會(huì)導(dǎo)致程序運(yùn)行到某一步因找不到元素而報(bào)錯(cuò)。NoSuchElementException。處理這種問題,常用 異常處理【 try,except,else,final】

? ? ? ?

            
try:
//某個(gè)字段可能由于內(nèi)容不同導(dǎo)致html格式不同,無法使用同一個(gè)xpath獲取到
    Status = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[4]/b'%count).text
    
except NoSuchElementException:  //取不到字段的時(shí)候,就開始運(yùn)行另一種形式
    Status = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[4]/font/b/b' % count)
    count_parren = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[4]/'% count).text
    count = re.search('\(\d\)', count_parren).group()
final: driver.quit()  //最后退出瀏覽器

          

問題8:for循環(huán)與try使用錯(cuò)誤

? ? ? ? 主要是對try使用方法的不理解,導(dǎo)致的問題。

? ? ? ? try:當(dāng)執(zhí)行其中的方法出現(xiàn)錯(cuò)誤后,就會(huì)直接跳出try中的代碼。相當(dāng)于發(fā)現(xiàn)報(bào)錯(cuò),就執(zhí)行了break。所以當(dāng)try中寫入了for循環(huán)后,任何一次執(zhí)行內(nèi)容出現(xiàn)了異常,都會(huì)跳出整個(gè)for循環(huán)。

? ? ? ? 解決方法也很簡單,值需要將try寫到for循環(huán)中。

            
for count in range(1,len(Application_List)+1):
    try:
        Applation = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[1]/b'%count).text
    except NoSuchElementException:
        break
          

問題9:確認(rèn)網(wǎng)頁是否打開的方法之一:使用title

? ? ? ? 有個(gè)自動(dòng)化需求的描述是,訪問地址判斷服務(wù)是否啟動(dòng)。接到需求的時(shí)候,考慮捕捉該網(wǎng)址特定的字段,能夠捕捉到就算啟動(dòng)了。這種方案的問題在于,每個(gè)頁面的內(nèi)容不一致,每個(gè)都需要寫,很要命。所以就想有沒有一個(gè)所有頁面都使用但是內(nèi)容還各不相同的用于區(qū)別頁面以及驗(yàn)證是否啟動(dòng)。這個(gè)時(shí)候就先到了,Title

? ? ? ? selenium中也有取title的方法:driver.title

? ? ? ? 開發(fā)內(nèi)容就分為了兩步:第一步,根據(jù)提供的地址獲取title,寫入配置文件中。

第一步,只是取title的過程用自動(dòng)化執(zhí)行了,然后打印出title,復(fù)制粘貼到excel里。當(dāng)然也可以直接寫入excle,就是比較麻煩,一次性完成的內(nèi)容,還是手動(dòng)操作能快些。

第二部,實(shí)際測試的時(shí)候,取title與配置文件中的比較。

            
for Key, Value in URL_Dict.items():
    # 驗(yàn)證內(nèi)容正確性
    driver = browser_config['chrome']()
    uihandle = UIHandle(driver)
    try:
        uihandle.get(Value[0])
        sleep(2)
        # 獲取登陸頁面的Title信息
        Server_Title = driver.title
        # 獲取的Title與config中的title比較,如果不同,則說明頁面沒啟動(dòng)
        if Server_Title == Value[1]:
            # print("{Key}:{url} 已經(jīng)啟動(dòng)".format(Key = Key, url = Value[0]))
            self.TestReport['Total_Success'] += 1
        else:
            print('*'* 50)
            print("{Key}:{url} 環(huán)境未啟動(dòng)".format(Key = Key, url = Value[0]))
            self.TestReport['Total_Failures'] += 1
            self.TestReport["Error_Report"].append("""{Key}:{url}
                            該地址未完成啟動(dòng)
                            """.format(Key=Key, url=Value[0]))

    except InvalidArgumentException:
        self.TestReport["Error_Report"].append("""{Key}:{url}
        該地址無法訪問
        """.format(Key = Key, url = Value[0]))
        self.TestReport['Total_Failures'] += 1
    finally:
        driver.quit()
          

問題10:selenium操作下拉選項(xiàng)內(nèi)容

? ? ? ? UI自動(dòng)化經(jīng)常會(huì)需要點(diǎn)擊一些下拉選項(xiàng)。目前可行的方法是,先獲取控件位置以及選項(xiàng)位置。然后先點(diǎn)擊控件再點(diǎn)擊選項(xiàng)。就能夠完成選項(xiàng)選擇

            
uihandle.Click("前端", '性別選型')
uihandle.Click("前端", '男')
          

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 韶关市| 萨迦县| 乌兰县| 太原市| 八宿县| 城口县| 都江堰市| 苍溪县| 大埔区| 甘谷县| 高阳县| 寿阳县| 新巴尔虎左旗| 于田县| 花莲市| 原阳县| 清水河县| 丹寨县| 涞水县| 三原县| 南昌市| 秦皇岛市| 郎溪县| 文水县| 商丘市| 融水| 财经| 黄石市| 宜兰县| 垣曲县| 涞水县| 方正县| 南昌市| 天台县| 苍山县| 衡阳市| 普格县| 乐业县| 潼南县| 榆社县| 福泉市|