栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

web自动化测试:窗口切换

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

web自动化测试:窗口切换

1.标签页切换

在某个窗口上点击某个链接在新标签页显示新窗口时,如果想要点击新标签页的元素时,需要进行窗口切换。

driver.switch_to.window('窗口名称')

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as when


class TestDemo:
    def test_01(self):
        with webdriver.Chrome(executable_path='chromedriver96.exe') as browser:
            browser.implicitly_wait(10)
            browser.get("http://www.baidu.com")
            # input_el = browser.find_element('xpath', '//input[@id="kw"]')
            # 引入By,会有相应提示,不容易出错
            input_el = browser.find_element(By.XPATH, '//input[@id="kw"]')
            input_el.send_keys('柠檬班')
            # 找到搜索按钮
            search_btn = browser.find_element(By.XPATH, '//input[@id="su"]')
            # 点击搜索按钮
            search_btn.click()
            # 等待元素加载完成之后,再运行下面的代码
            # 显性等待
            # 1.获得等待器,设置倒计时
            # 2.等待的条件出现
            # 3.在超时前,如果等待条件出现了,就返回;如果等待条件没出现,就一直查找,直到报超时额错误
            wait = WebDriverWait(browser, timeout=10)
            # 元组形式传进去
            condition = when.element_to_be_clickable((By.link_TEXT, 'lemon.ke.qq.com/'))
            lemon_link = wait.until(condition)
            # lemon_link = browser.find_element(By.link_TEXT, 'lemon.ke.qq.com/')
            lemon_link.click()
            # 获取所有的窗口,返回列表
            print('打印所有的窗口列表', browser.window_handles)
            # 有一个新页面生成
            # 切换到新页面
            browser.switch_to.window(browser.window_handles[-1])
            # 打印当前窗口
            print('打印当前窗口',browser.current_window_handle)
            browser.find_element(By.CSS_SELECtOR, '.agency-content')
2.iframe页面

iframe是个子页面,如果想要定位iframe页面上的元素(排行榜),必须先切换到iframe页面上。

driver.switch_to.frame(params)--传值有三种形式,查看源码可知

  • iframe的name属性的值
  • 索引
  • driver.find_element(),常用

首先本地创建带有iframe标签的html网页:




    
    py44


hello python

想要引用本地创建的html网页时,需要在本地文件夹内打开html文件,获取浏览器的地址,不要在pycharm中打开(否则不能通过selenium打开)。

from selenium import webdriver
from selenium.webdriver.common.by import By


class TestDemo:
    def test_01(self):
        with webdriver.Chrome(executable_path='chromedriver96.exe') as browser:
            browser.implicitly_wait(10)
            browser.get(
                "file:///D:/PycharmProjects/Py44/day36_%E7%AD%89%E5%BE%85%E5%92%8C%E5%88%87%E6%8D%A2/iframe_web.html")
            browser.find_element(By.ID, 'hello')
            # 必须切换到iframe当中
            iframe = browser.find_element(By.ID, 'i')
            browser.switch_to.frame(iframe)
            # iframe
            browser.find_element(By.XPATH, '//span[contains(text(),"排行榜")]')
 # 必须切换到iframe当中 
iframe = browser.find_element(By.ID, 'i') 
browser.switch_to.frame(iframe)
# 子页面的子页面,多层嵌套时,一层一层进去
sub_iframe = browser.find_element(By.ID, 'i')
browser.switch_to.frame(sub_iframe)
# 嵌套一个iframe时,切换回到主页面
browser.switch_to_default_content()
# 多级时,切换到父级iframe页面,
browser.switch_to_parent_content()
3.alert页面

alert弹框出现后,如果要定位主页面的元素,必须先关闭alert弹框,返回到主页面,否则会报错。

browser.switch_to.alert.accept()

本地搭建html页面:




    
    py44


hello python

想要引用本地创建的html网页时,需要在本地文件夹内打开html文件,获取浏览器的地址,不要在pycharm中打开(否则不能通过selenium打开)。

from selenium import webdriver
from selenium.webdriver.common.by import By


class TestDemo:
    def test_01(self):
        with webdriver.Chrome(executable_path='chromedriver96.exe') as browser:
            browser.implicitly_wait(10)
            browser.get(
                "file:///D:/PycharmProjects/day37_%E6%B5%8F%E8%A7%88%E5%99%A8%E6%93%8D%E4%BD%9C/alert.html")
            el = browser.find_element(By.ID, 'hello')
            el.click()
            # 出现alert,无法再定位主页面
            # 1.先切换到alert当中,点击确定
            # 注意,alert后面没有括号,accept()确定,dimiss()取消
            browser.switch_to.alert.accept()
            el = browser.find_element(By.ID, 'hello')

实现弹框的方式:

  • 原生的alert,prompt,样式很丑,现在很少用;
  • 框架vue.js实现ui效果,弹框,就是普通的元素,不需要切换 。

toast:吐司

因为是通过js动态加载的,过特定时间消失,当出现时,使用source的暂停键,相当于js的debug,注意设置等待。

4.元素找不到可能的原因
  • 元素定位的表达式不正确,解决办法:浏览器中F12源代码中ctrl+f 进行表达式校验;
元素定位不要用动态生成值:
如果属性存在以下特性,做好不要用该值作为元素定位的依据:
--属性值有数字;
--存在加密字符,也有可能动态生成;
--class里面有active、hidden等会变化的值。
  • 没有等待或者是等待的时间不足,没有加载出来;
  • 不在这个页面上(另外的窗口或者在一个iframe当中)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/613883.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号