1:过期:当页面来回去切换的时候,必须重新获取,否则报错过期 必须重新获取一次,避免ABA的发生
代码案例:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 1:打开浏览器
driver=webdriver.Chrome()
# 2:输入你的网站
driver.get('http://novel.hctestedu.com/')
driver.implicitly_wait(30)
#find_elements加s是返回一个列表,那到了全部的dd(2个)和全部的a(2个),一共4个
book_urls = driver.find_elements(By.XPATH, '//*[@id="topBooks1"]/dd/a')
try:
for her in range(len(book_urls)):
book_urls = driver.find_elements(By.XPATH, '//*[@id="topBooks1"]/dd/a')
"""element is not attached to the page document
必须加第14行,这个要放在for循环下面;当页面来回去切换的时候,必须重新获取,否则报错过期
必须重新获取一次,避免ABA的发生"""
book_urls[her].click()
driver.back()
assert driver.title == "读书屋_原创小说网站","上面出现错误"
print(f"第{her+1}本书测试成功,")
except Exception as e:
print(f"出错了,原因是{e}")
finally:
time.sleep(50)
#driver.quit()#关闭浏览器
2:窗口切换:selenium不能自动切换窗口,在打开一个新的窗口的时候,selenium的视角还在第一给窗口上,我们需要使用代码切换第二给窗口上面
driver.switch_to.window(driver.window_handles[1])#driver.window_handles打印所有的窗口
selenium也不能自动关闭窗口,当我们切换到第二给窗口的时候,selenium视角还在第二窗口上面.但是我们需要在第一给窗口操作,我们也需要使用代码切换回来
driver.switch_to.window(driver.window_handles[0])#切花到第二给句柄
总之:selenium无法自行进行窗口的切换,不论打开一个新的窗口,或者关闭一个新的窗口,必须使用代码来实现
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 1:打开浏览器
driver=webdriver.Chrome()
# 2:输入你的网站
driver.get('http://www.hao123.com/book')
driver.implicitly_wait(30)
print(f"第一窗口的title是:{driver.title}")
try:#打开的第二给窗口
driver.find_element(By.XPATH,'//*[@id="bd"]/div[1]/div/ul/li[1]/h3/div/a').click()
print(f"这时窗口的title是:{driver.title}")#selenium不能自动切换窗口,selenium的视角还在第一个窗口
driver.switch_to.window(driver.window_handles[1])#driver.window_handles打印所有的窗口
print(f"第二窗口的title是:{driver.title}")
assert driver.title !="小说__hao123上网导航","窗口没有切换成功"
print("窗口切换成功")
#关闭窗口
driver.close() #当句柄那那个窗口上面,就会关闭那个窗口
#print(driver.title)no such window: target window already closed
#虽然第二个窗口已经关闭了,但是句柄还在第二个窗口上; 这时候第二窗口已经关闭,无法获取第二个窗口的title,
#所有记住窗口的切换必须切换句柄
driver.switch_to.window(driver.window_handles[0])#切花到第二给句柄
print(f"切换后的句柄:{driver.title}")
except Exception as E:
print(f"出错的原因是{E}")
finally:
driver.quit()