切换窗口定位不到元素

当点击某个链接,浏览器上出现新窗口时,selenium不会自动在新窗口中定位元素,而是继续在旧页面查找元素,就会定位不到元素报错,这时就需要我们进行窗口切换。本文提供三个方法可解决这一问题。

1、出现新窗口的原因

在首页点击登录按钮,会重新弹出一个新的登录窗口,因为这个链接文本有一个属性叫target="_blank",会打开一个新的页面。把这个属性去掉登录页面就会在当前的页面上了。

2、进行窗口切换switch_to.window

步骤
    1)、定位当前浏览器中所有的窗口的名字
        driver.window_handles
    2)、找出最后一个窗口的名字
        driver.window_handles[-1]
    3)、用switch_to()方法,把selenium切换到最后一个窗口进行定位。
    4)、合起来写
        driver.switch_to.window(driver.window_handles[-1])

class TestLogin2:
    def test_login2(self,driver):
        # 1、打开首页
        driver.get('https://svr-6-9010.share.51env.net/')
        # 2、打开右上角的登录链接,此时登录页面会在一个新窗口中弹出
        driver.find_element_by_link_text('登录').click()
        # 3、先定位当前浏览器中,所有窗口的名字,再切换到最后一个窗口
        driver.switch_to.window(driver.window_handles[-1])
        # 4、输入用户名
        driver.find_element_by_id('id_login').send_keys("changcheng1211")

3、把前一个窗口关闭,只打开新弹出的窗口driver.close()

driver.close()
    关闭当前浏览器的默认窗口,如果只有一个窗口,就会关闭浏览器。
    除非需要窗口切换,一般不用close方法,
    关闭浏览器有一个更好的方法
        driver.quit()

class TestLogin2:
    def test_login2(self,driver):
        # 1、打开首页
        driver.get('https://svr-6-9010.share.51env.net/')
        # 2、打开右上角的登录链接,此时登录页面会在一个新窗口中弹出
        driver.find_element_by_link_text('登录').click()
        # 关闭上一个窗口
        driver.close()
        # 3、输入用户名
        driver.find_element_by_id('id_login').send_keys("changcheng1211")

4、把重新打开窗口属性删除,不出现新窗口

我们知道因为登录按钮有target="_blank"属性,所以才会出现新窗口。所以我们可以用先用javascript删除target属性,再点击“登录”链接,这时就不会产生新窗口了

首先在页面控制台调试javascript脚本,做试验移除这个属性。

点击控制台,如果有提示框,请输入allow pasting

点击控制台,

输入 document.querySelector('.sign-in-wrap a')  并按回车找到了该元素,

document指的是整个页面的Html,我们在整个文档中找元素,相当于selenium 中的driver

document.querySelector('.sign-in-wrap a') 相当于selenium 中driver.find_elements(By.CSS_SELECTOR,'.sign-in-wrap a')

'.sign-in-wrap a'      表示class为sign-in-wrap下面的a标签内容

去掉target属性,执行命令 document.querySelector('.sign-in-wrap a').removeAttribute('target')

.removeAttribute('target')",通过这种方法,可以删除任意元素的属性。

在重新查一下,可以看到target="_blank"属性已经没有了,此时就不会弹出新的窗口了。

在点击链接前,点击删除属性。就可以了,再点击“登录”链接,这时就不会产生新窗口了
script = "document.querySelector('.sign-in-wrap a').removeAttribute('target')"
driver.execute_script(script)


class TestLogin3:
    def test_login3(self,driver):
        # 1、打开首页
        driver.get('https://svr-6-9010.share.51env.net/')
        # 2、在点击链接前,点击删除属性。
        script = "document.querySelector('.sign-in-wrap a').removeAttribute('target')"
        driver.execute_script(script)
        # 3、打开右上角的登录链接,此时因为target属性被删除,就不会弹出新窗口了。
        driver.find_element_by_link_text('登录').click()

        # 4、输入用户名
        driver.find_element_by_id('id_login').send_keys("changcheng1211")

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值