在定位元素過程中,經常會遇到元素明明定位成功了,但是報錯卻提示確實沒有找到,這就是面試過程中經常遇到的元素不可見的問題。
元素不可見
首先要想到是什么屬性導致元素不可見,然后我們可以通過修改這個屬性進行確認。 hidden="hidden" 元素的可見與不可見通過hidden這個屬性來控制的。在一個元素前面加上這個屬性就會導致當前元素不可見。
安靜這里舉個小栗子:
這里安靜先找個正常的輸入框
<html> <body> 用戶名:<br> <input type="text" name="username" id="anjing"> <br> 密碼:<br> <input type="text" name="pwd" id="test"> <br><br> <input type="submit" value="登錄"> </form> <p>點擊登錄,進行提交</p> </body> </html>
打開瀏覽器是這個樣子的
進行對用戶名下的input標簽添加隱藏屬性
<html> <body> 用戶名:<br> <input hidden="hidden" type="text" name="username" id="anjing"> <br> 密碼:<br> <input type="text" name="pwd" id="test"> <br><br> <input type="submit" value="登錄"> </form> <p>點擊登錄,進行提交</p> </body> </html>
然后打開瀏覽器,發現用戶名的輸入框已經不見了
這個時候我們可以通過find_elements的方法判斷元素是否存在,然后進行輸入框輸入內容,查看是否輸入成功
經過執行結果可以看到,元素是找到的,但是卻沒有辦法進行執行操作。那么selenium中有什么辦法能幫助我們判斷元素是否可見?且能執行?
is_displayed()
is_displayed()是屬於webdriver中的一個方法,可以直接使用。同時也是判斷元素是否可見的一個方法,元素可見就返回True,不可見就返回False
def is_displayed(self): """Whether the element is visible to a user.""" # Only go into this conditional for browsers that don't use the atom themselves if self._w3c: return self.parent.execute_script( "return (%s).apply(null, arguments);" % isDisplayed_js, self) else: return self._execute(Command.IS_ELEMENT_DISPLAYED)['value']
話不多說,直接開始寫代碼,進行判斷元素是否可見
安靜這里通過小的栗子給大家介紹了如何判斷元素是否可見。可能會用小伙伴們問這里什么時候會用到?
我們可以在自己的框架中封裝一些常用的元素操作的方法,然后在傳入元素的時候進行判斷元素是否可見,如果不可見就報錯,這樣就省去了我們很多時間,當然這里是安靜常用的方法判斷,大家有好的方法也可以留言一起交流~~