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

一、alert

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

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

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

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

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

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

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

Selenium系列教程(六)窗口切换 alert、iframe、windows
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input id="alert" type="button" onclick="alert(‘这是一个弹框‘)" value="alert" />
<input id="confirm" type="button" onclick="confirm(‘是否继续‘)" value="confirm" />
<input id="prompt" type="button" onclick="disp_prompt()" value="prompt" />
</body>
<script>
    function disp_prompt()
    {
        var name=prompt("Please enter your name","");
        if (name!=null && name!="")
        {
            document.write("Hello " + name + "!");
        }
    }
</script>
</body>
</html>
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()

Selenium系列教程(六)窗口切换 alert、iframe、windows
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="https://www.jd.com">京东</a>

</body>
</html>
test.html
Selenium系列教程(六)窗口切换 alert、iframe、windows
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="https://www.baidu.com">百度</a>

<iframe id="test" src="test.html" width="200" height="200">
</iframe>
</body>
</html>
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()
 

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

上一篇:windows server中安装IIS


下一篇:大客户VL版本Windows客户端加域自动激活详细教程