問題描述
使用自動化腳本訪問csdn首頁,點擊登錄鏈接,會在新窗口打開登錄頁面,但是賬號登錄的鏈接定位失敗。

image.png

image.png
報錯日志如下:

image.png
問題分析
賬號登錄的鏈接在新打開的窗口里面,需要切換到新打開的窗口,代碼如下:
# 切換到新打開的窗口
self.driver.switch_to.window(self.driver.window_handles[-1])
注意:切換到新窗口前先顯式等待(比如等待2秒),否則就會報錯(元素定位失?。?/strong>

image.png

csdn_login.gif
完整代碼
# -*- coding: utf-8 -*-
from selenium.webdriver import *
from time import *
import unittest
from parameterized import parameterized
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class LoginTest(unittest.TestCase):
"""
測試類
"""
driver = None
@parameterized.expand([
("https://www.csdn.net/", "admin", "123456")
])
def test_login(self, url, username, password):
"""
測試
:param url:
:param username:
:param password:
:return:
"""
# 最大化窗口
self.driver.maximize_window()
# 設置默認的等待時長
self.driver.implicitly_wait(15)
# 打開網頁
self.driver.get(url)
# 點擊
self.driver.find_element_by_link_text("登錄").click()
#
sleep(2)
# 切換到新打開的窗口
self.driver.switch_to.window(self.driver.window_handles[-1])
#
self.driver.find_element_by_link_text("賬號登錄").click()
#
self.driver.find_element_by_id("all").send_keys(username)
#
self.driver.find_element_by_id("password-number").send_keys(password)
self.driver.find_element_by_class_name("btn-primary").click()
sleep(3)
@classmethod
def setUpClass(cls):
# 創(chuàng)建驅動工具
cls.driver = Firefox()
@classmethod
def tearDownClass(cls):
# 關閉瀏覽器
cls.driver.quit()
if __name__ == "__main__":
# verbosity表示測試日志的詳細級別
unittest.main(verbosity=2)
參考資料
[01] selenium之 定位以及切換frame(iframe)
https://blog.csdn.net/huilan_same/article/details/52200586
[02] selenium之 切換窗口、frame、alert
https://blog.csdn.net/Rao_Juan/article/details/85554482
微信掃一掃關注該公眾號【測試開發(fā)者部落】

image.png
點擊鏈接加入群聊【軟件測試學習交流群】
https://jq.qq.com/?_wv=1027&k=5eVEhfN
軟件測試學習交流QQ群號:511619105