?1.利用appium+python滩愁,執(zhí)行系統(tǒng)首頁自動化登錄操作谜叹。
?
2.雖然執(zhí)行結果的確是顯示已經登錄到系統(tǒng),但是日志總是提示錯誤咏窿,如下圖所以:?
我想肯定是腳本什么地方有問題,于是粗略分析了一下這段話"selenium.common.exceptions.NoSuchElementException: Message: no such element"
這句話的意思是:當前頁面沒有這樣的元素存在素征。
百思不得其解的是翰灾,我對每個元素單獨進行定位操作時,都沒有提示錯誤稚茅,莫非是某個元素定位并執(zhí)行完成后,對后續(xù)元素定位有影響平斩,導致某個元素無法正確定位亚享。
3.于是注意力主要集中在用于定位元素這塊的代碼,一個一個進行排除绘面。?
? ?當我將用于定位到“登錄”按鈕的這行代碼進行注釋時(下圖中#模擬點擊登錄按鈕 的下一行代碼)欺税,發(fā)現(xiàn)代碼終于不再提示錯誤。
但是似乎我又發(fā)現(xiàn)了一個奇怪的現(xiàn)象揭璃,就是我將登錄按鈕的點擊操作進行了注釋晚凿,為什么最終的執(zhí)行結果仍然會登錄到系統(tǒng)中。
于是又要關注的重點轉移到離登錄操作最近的一個步驟——就是獲取驗證碼并輸入驗證碼瘦馍。
理論上歼秽,輸入完成驗證碼,再點登錄按鈕后情组,就會登錄到系統(tǒng)中燥筷。?
4.對代碼進行debug調試箩祥,斷點設置在如下圖所示地方:
?猛然發(fā)現(xiàn)使用send_keys(randomcodeTxt)進行驗證碼輸入時,輸入的驗證碼字符串最后居然還帶有一個\n肆氓,一般\n表示鍵盤上的回車按鈕袍祖。這下終于明白了為什么即使注釋掉登錄按鈕的操作,仍然可以登錄到系統(tǒng)谢揪。這好比人工輸入完驗證碼后直接敲了一下回車鍵蕉陋。
?
5. ?randomcodeTxt的值來源于,一個專門用于獲取圖片中驗證碼的函數(shù)的返回值拨扶。于是最終將目光鎖定在函數(shù)identifyingCode()?
?根據(jù)代碼debug過程顯示凳鬓,當執(zhí)行到readline()這個方法時,返回的驗證碼后面含有一個\n,由于readline()方法是按照行來讀取內容屈雄,那么自然會帶入一個回車字符村视。于是就需要去掉含有\(zhòng)n的字符串,那么加一行代碼strIndet.split('\n')[0],將字符串按照\n進行分割酒奶,取list中的第一組元素蚁孔,那么函數(shù)最終自然返回不帶\n的驗證碼了。?
再運行一次代碼惋嚎,去掉登錄代碼的注釋杠氢,最終執(zhí)行結果符合預期,也沒有錯誤提示出現(xiàn)另伍。?