一、alert
javascript 有三种模式的消息框,分别是alert(),confirm()和prompt()
1、alert()--警告消息框
alert 弹框提供了一个参数用来显示文本参数,还提供了一个确认按钮让用户关闭该消息弹框。
2、confirm()--确认消息框
confirm 可向用户问一个“是-或-否”问题,并且用户可以选择单击“确定”按钮或者单击“取消”按钮。
3、prompt()--提示消息框
提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。
<!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>
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()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="https://www.jd.com">京东</a> </body> </html>
<!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>
示例代码:
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()