在页面操作的时候单击某个链接会弹出新的窗口,这时就需要切换到新打开的窗口进行操作,webdriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。下面以百度窗口为例。直接上代码。
class Page(object):
'''基础类,用于页面对象的继承'''
login_url = 'https://www.baidu.com/'
def __init__(self,selenium_driver,base_url = login_url):
self.base_url = base_url
self.driver = selenium_driver
def _open(self,url):
url = self.base_url
self.driver.get(url)
def open(self):
self._open(self.url)
def find_element(self,*loc):
return self.driver.find_element(*loc)
from selenium.webdriver.common.by import By
from time import sleep
from .daidu_page import Page
class Login(Page):
#定位元素
url = '/'
xinwen_loc = (By.LINK_TEXT,'新闻')
nvren_loc = (By.XPATH,'/html/body/div[2]/div[2]/div[2]/div/ul/li[11]/a')
#调用
def type_xinwen(self):
self.find_element(*self.xinwen_loc).click()
def type_nvren(self):
self.find_element(*self.nvren_loc).click()
def user_login(self):
self.open() #打开百度
sreach_windows =self.driver.current_window_handle #获取当前窗口句柄
self.type_xinwen() #打开百度新闻
all_handles = self.driver.window_handles #获取所有句柄
self.type_nvren()
for handle in all_handles: #遍历所有句柄
if handle != sreach_windows: #当句柄不等于百度句柄时
self.driver.switch_to.window(handle) #切换窗口到百度新闻句柄
self.type_nvren() #点击新闻女生模块
sleep(6) #等待6s查看结果
import unittest
from selenium import webdriver
from .baidu_object import Login
class Test_login(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(10)
self.login = Login(self.driver)
def tearDown(self):
self.driver.quit()
def user_login_verify(self):
self.login.user_login()
def test_1(self):
self.user_login_verify()
if __name__ == '__main__':
unittest.main()