版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/PoorGuy_tn/article/details/81873812
selenium处理alert,windows和div
alert操作
针对alert,selenium提供了相应的类来进行处理。
selenium.webdriver.common.alert.Alert(driver)
先列出Alert的所有操作:
Alert(driver).accept() # 等同于点击“确认”或“OK”
Alert(driver).dismiss() # 等同于点击“取消”或“Cancel”
Alert(driver).authenticate(username,password) # 验证,针对需要身份验证的alert,目前还没有找到特别合适的示例页面
Alert(driver).send_keys(keysToSend) # 发送文本,对有提交需求的prompt框(上图3)
Alert(driver).text # 获取alert文本内容,对有信息显示的alert框
示例代码:
示例1:switch_to.alert , accept() , text
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://sahitest.com/demo/alertTest.htm')
driver.find_element_by_name('b1').click()
a1 = driver.switch_to.alert # 通过switch_to.alert切换到alert
sleep(1)
print a1.text # text属性输出alert的文本
a1.accept() # alert“确认”
sleep(1)
driver.quit()
结果
Alert Message
示例2:Alert(driver) , dismiss()
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.alert import Alert
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://sahitest.com/demo/confirmTest.htm')
driver.find_element_by_name('b1').click()
a1 = Alert(driver) # 直接实例化Alert对象
sleep(1)
print a1.text # text属性输出alert的文本
a1.dismiss() # alert“取消”
sleep(1)
driver.quit()
结果
Some question?
示例3:switch_to.alert , send_keys(keysToSend)
# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://sahitest.com/demo/promptTest.htm')
driver.find_element_by_name('b1').click()
a1 = driver.switch_to.alert # 通过switch_to.alert切换到alert
sleep(1)
print a1.text # text属性输出alert的文本
a1.send_keys('send some words to alert!') # 往prompt型alert中传入字符串
sleep(1)
a1.accept()
print driver.find_element_by_name('t1').get_attribute('value')
driver.quit()
结果
Some prompt?
send some words to alert!
window操作
window类似于alert,不过与原window是平行的,所以只需要切换到新的window上便可以操作该window的元素。
driver.switch_to.window(window_handle)
而window是通过window句柄handle来定位的。而selenium提供了两个属性方法来查询window句柄:
driver.current_window_handle
driver.window_handles
用以上两个属性获取到当前窗口以及所有窗口的句柄,就可以切换到其他的window了。
示例代码:
# -*- coding: utf-8 -*-
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.alert import Alert
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('http://sahitest.com/demo/index.htm')
current_window = driver.current_window_handle # 获取当前窗口handle name
driver.find_element_by_link_text('Window Open Test With Title').click()
all_windows = driver.window_handles # 获取所有窗口handle name
# 切换window,如果window不是当前window,则切换到该window
for window in all_windows:
if window != current_window:
driver.switch_to.window(window)
print driver.title # 打印该页面title
driver.close()
driver.switch_to.window(current_window) # 关闭新窗口后切回原窗口,在这里不切回原窗口,是无法操作原窗口元素的,即使你关闭了新窗口
print driver.title # 打印原页面title
driver.quit()
结果:
With Title
Sahi Tests
这里有一些注意事项:
1.只能通过window的name来切换窗口,但window的name不是你想象的窗口title之类的,而是一串字符串,如‘{976ae257-19be-4b32-a82e-4ba5063ed0a2}’,所以你用title、url之类的想切window是不可能的
2.关闭了新窗口之后,driver并不会自动跳转回原窗口,而是需要你switch回来,直接去定位窗口元素会报NoSuchElementException
div类对话框
div类对话框是普通的网页元素,通过正常的find_element就可以定位并进行操作。不在这里进行详述。注意设置一定的等待时间,以免还未加载出来便进行下一步操作,造成NoSuchElementException报错。