日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python selenium自动化(三)Chrome Webdriver的兼容

發(fā)布時(shí)間:2023/12/13 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python selenium自动化(三)Chrome Webdriver的兼容 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)一個(gè)自動(dòng)化測試被實(shí)現(xiàn)在一個(gè)瀏覽器之后,我們會(huì)希望我們的測試能夠覆蓋到盡量多的別的瀏覽器。通過跨平臺的測試來保證我們的程序在多個(gè)瀏覽器下都能正常工作。

?

在安裝了selenium之后,firefox webdriver和IE webdriver就已經(jīng)是ready to use的了,但是如果想要在Chrome下進(jìn)行測試的話需要再安裝Chrome webdriver。Chrome webdriver是由Chromium項(xiàng)目自己維護(hù)的,因此在實(shí)現(xiàn)上也和Firefox driver以及IE driver有一些不同之處。這就導(dǎo)致了在將在Firefox上可以正常運(yùn)行的測試代碼運(yùn)用到chrome時(shí)會(huì)產(chǎn)生一些兼容性的問題。

?

1. WebDriverWait的可靠性

上一篇博客提到過,當(dāng)頁面上有使用ajax異步加載的元素的時(shí)候,為了確保對元素進(jìn)行操作的時(shí)候該元素已經(jīng)處在一個(gè)可用的狀態(tài)下了,我們可以使用WebDriverWait來使driver等待至目標(biāo)元素滿足給出的條件時(shí)才繼續(xù)下面的操作。但是在Chrome中,這個(gè)方法似乎不是總是適用。

?

2.一些奇怪的異常

總的來說,測試代碼在Chrome下的運(yùn)行是非常快的,至少人眼就可以感覺出來比Firefox下的運(yùn)行速度要快一點(diǎn),當(dāng)然這是在不報(bào)異常的情況下。而實(shí)際情況是,在Firefox下可以正常運(yùn)行的代碼,在Chrome下卻會(huì)出現(xiàn)問題,并且拋出一些奇怪的異常:

selenium.common.exceptions.WebDriverException: Message: u'unknown error: Element is not clickable at point selenium.common.exceptions.InvalidElementStateException: Message: u'invalid element state selenium.common.exceptions.ElementNotVisibleException: Message: u'element not visible

第一個(gè)異常的拋出一般會(huì)發(fā)生在radio button的點(diǎn)擊事件上,但是一般異常拋出的同時(shí),系統(tǒng)會(huì)告訴你當(dāng)前的element不可以被點(diǎn)擊,但是另外的某個(gè)元素可以接受這個(gè)點(diǎn)擊事件。這時(shí)我們可以查看頁面上系統(tǒng)給出的備選元素是否也可以滿足我們的點(diǎn)擊需求,如果可以,我們可以簡單的把radio button換成這個(gè)備選元素來回避這個(gè)異常。

另外,這三個(gè)異常都與Chrome的運(yùn)行速度以及WebDriverWait的可靠性有一定關(guān)系。因此,我們可以稍顯“粗暴”的讓webdriver休眠一段時(shí)間來slow down測試代碼的執(zhí)行速度,強(qiáng)制driver等待一個(gè)固定的時(shí)間來讓元素加載完成。

import time #some test code time.sleep(2) #continue test code

time.sleep(2)會(huì)使driver休眠兩秒,然后再繼續(xù)執(zhí)行后面的測試代碼

?

3.不在當(dāng)前視圖范圍內(nèi)的元素的操作

當(dāng)我們使用Firefox webdriver來測試某個(gè)頁面的時(shí)候,如果我們選取了某個(gè)頁面元素來對其進(jìn)行操作,但是這個(gè)元素不在當(dāng)前瀏覽器顯示的視圖范圍內(nèi),Firefox webdriver的做法是自動(dòng)的將視圖調(diào)整到該元素顯示的區(qū)域,然后對這個(gè)元素進(jìn)行操作。也就是說driver自己完成了頁面的scroll down or up的操作。

但是在Chrome webdriver中,如果待操作元素不在視圖顯示范圍內(nèi),則會(huì)拋出Element is not clickable at point異常。或是如果設(shè)置了WebDriverWait并且它正常工作的話會(huì)拋出Timeout異常。

因此,在使用Chrome wbedriver的時(shí)候,我們要更加小心,對于需要滾動(dòng)頁面才能顯示在視圖中的元素,我們需要添加代碼使頁面滾動(dòng)至元素顯示的范圍,然后再對該元素進(jìn)行操作。使頁面滾動(dòng)的方法是:

driver.execute_script("window.scrollBy(0,200)","") #向下滾動(dòng)200px driver.execute_script("window.scrollBy(0,document.body.scrollHeight)","") #向下滾動(dòng)到頁面底部

?

轉(zhuǎn)載于:https://www.cnblogs.com/harolei/p/3466284.html

總結(jié)

以上是生活随笔為你收集整理的python selenium自动化(三)Chrome Webdriver的兼容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。