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()
标签:--,多窗口,driver,switch,alert,window,切换,iframe From: https://www.cnblogs.com/guohui2022/p/16907298.html