1.@property 標籤,用於封裝接口,使用當前標籤可以引用框架的方法
2.page定位異常:maximum recursion depth exceeded —問題描述:由於嵌套太多超過最大遞歸深度
解決方法:手動調整遞歸深度
import sys
sys.setrecursionlimit(100000)
導致問題的場景:
3.driver.implicitly_wait()與time.sleep()的區別
implicitly_wait(5)屬於隱式等待,5秒鐘內只要找到了元素就開始執行,5秒鐘後未找到,就超時;
time.sleep(5)表示必須等待5秒定位;
如何靈活運用這兩種方式:
當某個頁面元素變化多,影響多的情況下,用sleep,等頁面元素穩定了,再定位。
如果用implicitly_wait(5),還沒等頁面元素穩定後就定位 ,導致定位不準確,比如操作某個元素後,會出現提示框,影響了後面元素的位置,導致定位不準確;所以用sleep,等提示框消失後開始定位
4.智能等待,用於解決每次都要顯式等待太耗費時間的問題-但是遇到問題 click按鈕無法點擊,是由於已經獲取到元素但是按鈕還沒展示出來導致的,報錯信息如下,解決方式使用sleep()
出現此問題的原因是因爲定位到元素後有一瞬間無法進行點擊,因此在獲取到元素後添加等待1秒使元素可以點擊,完美解決。
presence_of_element_located與visibility_of_element_located區別
presence_of_element_located: 當我們不關心元素是否可見,只關心元素是否存在在頁面中。
visibility_of_element_located: 當我們需要找到元素,並且該元素也可見。
5.driver內置保存截圖方法
# nowTime = time.strftime("%Y%m%d.%H.%M.%S")
# imgUrl = REPORT_PATH + '\\imgs\\'
# self.driver.get_screenshot_as_file(imgUrl + '%s.png' % nowTime)
6.在page層寫斷言提示缺少參數問題,報錯信息如下:
assertEqual() missing 1 required positional argument: ‘second’。
沒實例化對象導致的
7.靜態方法 和 類方法
@staticmethod
靜態方法,通過類直接調用,不需要創建對象,不會隱式傳遞self
@classmethod
類方法,方法中的self是類本身,調用方法時傳的值也必須是類的公有屬性,
就是說類方法只能操作類本身的公有字段
8.Windows下解決ImportError: cannot import name ‘main’
- 卸載現在的pip:
- python -m pip uninstall pip
- 重裝:
- python -m pip install pip==19.0.3
9.Element:ElementClickInterceptedException 異常解決
意思是說,點擊這個元素的時候,這個單擊事件被上層的div給接收了……說明div覆蓋在這個button上面。
element = driver.find_element_by_css('div[class*="loadingWhiteBox"]')
driver.execute_script("arguments[0].click();", element)
element = driver.find_element_by_css('div[class*="loadingWhiteBox"]')
webdriver.ActionChains(driver).move_to_element(element ).click(element ).perform()、
***ps:思索,有時候日誌所報的錯誤可能不是當前頁面的錯誤,而是上一個頁面的錯誤,再遇到問題時候應從報錯頁的上一步開始檢查!!!
10.ImportError: No module namedXXX
有可能是運行時編譯器選擇問題
11. assertEqual() missing 1 required positional argument: ‘second’
解決方案:
def test_python4():
m = unittest.TestCase()
m.assertEqual(1.1, 1.1, msg="error")
原因:
python實例化(創建對象)時寫成mm = unittest.TestCase不可以不帶括號,因爲不加括號就不是啓動實例,這個和設置一個別名是一樣的(說白了 加括號就是調用init函數 不加括號就是不調用init函數,不調用init函數就無法使用參數)。
場景: