Selenium3自动化测试实战--第4章 WebDriver API 3--定位一组元素,多表单切换,多窗口切换,警告框处理

4.8 定位一组元素

书中是elements = find_elements_by_id()

官网是elements = find_elements(By.ID,'')

然后for循环  for e in elements:

4.9 多表单切换

web应用中经常会用到frame、iframe表单嵌套页面的应用。首先,按官网介绍:框架是一种现在被弃用的方法,用于从同一域中的多个文档构建站点布局。除非使用的是HTML5之前的webapp,否则你不太可能与他们合作。内嵌框架允许插入来自不同领域的文档,并且仍然经常使用。所以,我们直接学习官网的方法,也许书中介绍的早已经过时了。

WebDriver提供了三种切换到帧的方法。

使用WebElement

# 存储网页元素
iframe = driver.find_element(By.CSS_SELECTOR, "#modal>iframe")
# 切换到选择的iframe
driver.switch_to.frame(iframe)
# 单击按钮
driver.find_element(By.TAG_NAME,'button').click()

使用name或id

如果frame或iframe具有id或name属性,则可以使用该属性。如果名称或id在页面上不是唯一的,那么将切换到找到的第一个。

# 通过id切换框架
driver.switch_to.frame('buttonframe')
# 单击按钮
driver.find_element(By.TAG_NAME,'button').click()

使用索引

使用frame的索引,例如可以使用JavaScript中的windows.frames进行查询

# 基于索引切换到第2个iframe
iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]
# 切换到选择的iframe
driver.switch_to.frame(iframe)

离开框架

driver.switch_to.default_content()

上面三种方法,都是使用了,1先找出iframe,2然后使用switch_to.frame()切换到该iframe,3使用switch_to.default_content()再离开,回到原来的外层的页面。

而书中,也是介绍的这些。

4.10 多窗口切换

switch_to.window()

current_window_handle

window_handles

# 获取当前页面的窗口句柄
search_window = driver.current_window_handle
# 获得当前所有打开的窗口句柄
all_handles = driver.windows_handles
# 进入注册窗口,通过遍历循环all_handles
for handle in all_handles:
    if handle !=search_window:
        driver.switch_to.window(handle)
        
# 回到搜索窗口
driver.switch_to.window(search_window)

webdriver没有区分窗口和标签页。而且官网提到,Selenium 4提供了一个新的api New Window它创建一个新选项卡或新窗口并自动切换到它。

# 打开新标签页,并切换到新标签页
driver.switch_to.new_window('tab')

# 打开一个新窗口,并切换到新窗口
driver.switch_to.new_window('window')

这里也没有明说参数tab和window是什么,如果是点击一个链接打开一个新窗口该怎么使用。

后来经过试验,参数tab,或window仅代表新创建一个新选项卡,还是一个新窗口。而点击链接打开的,仍需要通过传递handle进行切换。

4.11 警告框处理

首先使用switch_to.alert进行切换  # alert后面没有()

其实,使用相应函数进行操作

text:返回alert, confirm, prompt中的文字信息

  这三者的区别, alert警告框,是只有确定按钮

        confirm,有确定和取消按钮

        prompt,提示框可以文本输入,以及确定和取消

accept():接受现有警告框

dismiss():解散现有警告框

send_keys():在警告框中输入文本

# 获取警告窗
alert = driver.switch_to.alert

# 获取警告窗提示信息
alert_text = alert.text

# 确定警告框  接受警告框
alert.accept()

 

posted @   间歇性努力  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示