web自动化——Selenium 之切换

一、窗口(window)切换

  在浏览器当中,如果在页面进行了某个操作,结果浏览器打开了另外一个新窗口(tab)。如果要操作新窗口当中的页面元素,就需要窗口切换。

  前提:有新的窗口打开、或者你要操作其它窗口

  1、sleep(1)或显示等待 -- 等待浏览器新的窗口出现(无法使用隐性等待,隐性等待只能用于找元素)

  2、先获取当前会话浏览器的,所有窗口。句柄(窗口唯一标识)

    所有窗口句柄 = driver.window_handles    #是个列表

    句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。所以新窗口是列表的最后一个!

  3、切换到指定的窗口

    driver.switch_to.window(窗口的句柄)

#方式一:用sleep等待
sleep(1) #等待新窗口出现
# ========== 浏览器打开了另外一个新窗口 ===========
# 获取所有窗口句柄。句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。
wins = driver.window_handles
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
#方式二:用显性等待
# 获取当前的窗口句柄
wins = driver.window_handles

# === 打开新的窗口 ===
driver.find_element(By.XPATH, '//div[@id="1"]//a').click()

# ========== 浏览器打开了另外一个新窗口 2===========
# 要传一个当前的句柄列表。等待新窗口出现.
wait = WebDriverWait(driver,30)
wait.until(EC.new_window_is_opened(wins)) #new_window_is_opened新的窗口打开,逻辑是点击后的句柄数若大于点击之前的句柄数,那就表示有新窗口打开
# 取最新打开的窗口
new_wins = driver.window_handles
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])

二、iframe切换

  iframe:html当中内嵌了另外一个html。

  当页面中包含iframe时,不能直接操作iframe中的元素,需要先切换进iframe才行

  2.1、iframe切换

    1)要判断你要操作的元素,是否在iframe当中

      F12当中定位元素后,去看它的绝对路径当中是否有2个或2个以上的html。

    2)如果要操作iframe当中的元素,则必须切换到iframe当中。若有多层iframe,一层一层切入

      driver.switch_to.frame(iframe的元素识别策略)

driver.switch_to.frame("frameforlogin")

    3)如果要从iframe当中退出来

driver.switch_to.default_content()

    4)切换回上一层

driver.switch_to.parent_frame()

  2.2、iframe识别策略

    1)index(下标):整个页面所有的iframe当中,当前要切换的iframe的下标。从0开始

driver.switch_to.frame(1)

    2)name属性:driver.switch_to.frame(iframe name属性名)

driver.switch_to.frame("frameforlogin")

    3)webelement对象:通过find_element获得元素的webelement对象

driver.switch_to.frame(driver.find_element(By.ID,"frameforlogin"))

三、alert弹出框切换

  WebDriver提供了一个API,用于处理JavaScript提供的三种类型的原生弹窗消息。

  页面的弹出框2种:

  1)右键元素定位

  2)js弹框 -- 由页面操作触发的

  3.1、三种alert弹窗

    1)Alerts警告框

    https://www.w3school.com.cn/tiy/t.asp?f=hdom_alert

    2)confirm确认框,与警告框不同,确认框还有取消按钮

    https://www.w3school.com.cn/tiy/t.asp?f=hdom_confirm

    3)prompt提示框,还可以输入文本

    https://www.w3school.com.cn/tiy/t.asp?f=hdom_prompt

  3.2、切换进入Alert

driver.switch_to.alert

  3.3、Alert类

    1)accept() :确定

    如果有多个弹窗,可以点多次确定或取消

# 切换到alert
alert = driver.switch_to.alert
#确定
alert.accept()

    2)dismiss() :取消

# 切换到alert
alert = driver.switch_to.alert
#取消
alert.dismiss()

    3)send_keys():输入

    如果有默认输入内容,输入的内容会覆盖默认内容

# 切换到alert
alert = driver.switch_to.alert
# 在弹出框当中输入文本内容
alert.send_keys("hello selenium")
# 确定
alert.accept()

    4)text:获取当前弹框的文本内容

四、selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?

参考:https://www.cnblogs.com/Simple-Small/p/12486621.html

posted @ 2024-03-01 20:47  芒果93  阅读(22)  评论(0编辑  收藏  举报