python-selenium自动化-窗口的切换/过期

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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值