阅读 112

Selenium系列教程(六)窗口切换 alert、iframe、windows

一、alert

javascript 有三种模式的消息框,分别是alert(),confirm()和prompt()

1、alert()--警告消息框

alert 弹框提供了一个参数用来显示文本参数,还提供了一个确认按钮让用户关闭该消息弹框。

2、confirm()--确认消息框

confirm 可向用户问一个“是-或-否”问题,并且用户可以选择单击“确定”按钮或者单击“取消”按钮。

3、prompt()--提示消息框

提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。


"en">

    "UTF-8">
    Title


"alert" type="button" onclick="alert(‘这是一个弹框‘)" value="alert" />
"confirm" type="button" onclick="confirm(‘是否继续‘)" value="confirm" />
"prompt" type="button" onclick="disp_prompt()" value="prompt" />



demo.html
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://localhost:63342/demo.html")

driver.find_element_by_id("alert").click()
# 等待 alert 出现
WebDriverWait(driver, 10).until(EC.alert_is_present)
# 切换到 alert
alert = driver.switch_to.alert
# 获取alert 文本
print(alert.text)
# 点击 alert 确定
alert.accept()
# alert.dismiss() # 点击 alert 取消

driver.find_element_by_id("prompt").click()
WebDriverWait(driver, 10).until(EC.alert_is_present)
alert = driver.switch_to.alert
# 往alert 文本框输入文本
alert.send_keys("test")
alert.accept()

driver.quit()

 

二、iframe

如果一个网页里面嵌套了另一个页面,如果要定位内嵌页面的元素,则需要使用 driver.switch_to.ifram() 切换到内嵌的 iframe 操作元素,操作完成后重新回到主页面需要使用 driver.switch_to.default_content()


"en">

    "UTF-8">
    Title


"https://www.jd.com">京东


test.html

"en">

    "UTF-8">
    Title


"https://www.baidu.com">百度



demo.html

示例代码:

from time import sleep
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 EC

driver = webdriver.Chrome()
driver.get(http://localhost:63342/demo.html)

# iframe 切换方式一:
WebDriverWait(driver, 5, 0.5).until(EC.visibility_of_element_located((By.ID, "test")))
driver.switch_to.frame(driver.find_element(By.ID, "test"))
driver.find_element(By.LINK_TEXT, "京东").click()
sleep(2)
driver.back()
sleep(2)

# 回到默认页面
driver.switch_to.default_content()
driver.find_element_by_link_text("百度").click()
driver.back()
sleep(2)
# 回到父级页面
# driver.switch_to.parent_frame()

# iframe 切换方式二:
WebDriverWait(driver, 5, 0.5).until(EC.frame_to_be_available_and_switch_to_it((By.ID, "test")))
driver.find_element(By.LINK_TEXT, "京东").click()
sleep(2)

driver.quit()

 

三、window

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep

driver = webdriver.Chrome()
driver.get(https://www.baidu.com/)
driver.maximize_window()

# 1. 获取当前窗口句柄和总数
handles = driver.window_handles
print(handles)
# 2. 打开新窗口并等待新窗口打开,new_window_is_opened 新窗口打开后窗口句柄会 +1;注意:new_window_is_opened(handles) 传入的 handlers 一定要是在click操作之前获取的handlers,否则会出错
driver.find_element_by_link_text("新闻").click()
WebDriverWait(driver, 10).until(EC.new_window_is_opened(handles))

# 3. 再次获取窗口句柄,新打开的窗口句柄在最后一个
handles = driver.window_handles

# 4. 切换窗口句柄到最新打开的窗口
driver.switch_to.window(handles[-1])

# 5. 执行操作
driver.find_element_by_link_text("贴吧").click()
sleep(3)

# 6. 切换到原来的窗口继续执行操作
driver.switch_to.window(handles[0])
driver.find_element_by_link_text("地图").click()
sleep(3)

driver.quit()
 

原文:https://www.cnblogs.com/sharef/p/13661835.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐