【WebDriver API】python之selenium警告框处理

在WebDriver中处理JavaScript所生成的alter、confirm以及prompt十分简单,具体做法是使用switch_to_alter()方法定位到alter/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作。

1.警告消息框(alert)
  警告消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是说用户必须先关闭该消息框然后才能继续进行操作。

2.确认消息框(confirm)

  确认消息框向用户提示一个"是与否"问题,用户可以根据选择"确定"按钮和"取消"按钮。

3.提示消息对话(prompt)
  提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示。该消息框有一个"确定"按钮和一个"取消"按钮。选择"确认"会响应对应的提示信息,选择"取消"会关闭对话框。

alter、comfirm、prompt三种样子,如下图

  • text:返回alter/confirm/prompt中的文字信息。
  • accept():接受现有警告框,即点击确认。
  • dismiss():解散现有警告框,即点击取消或者“x"掉对话框。
  • send_keys(keysToSend):发送文本至警告框,

    输入文本值,仅限于prompt,在alter和confirm上没有输入框,警示框出现的步骤肯定是在某一个事件之后的,但你的场景也可能是不一定出现警示框,所以可以用try except去捕捉警示框,这里没写具体代码,自己去尝试哦~,如果警示框出现,就切换至警示框进行操作了。

  • keysToSend:将文本发送至警告框。

百度搜索设置弹出的窗口是不能通过前端工具对其进行定位的,这个时候就可以通过switch_to_alert()方法接受这个弹窗。

警告框处理.py

扫描二维码关注公众号,回复: 9102768 查看本文章
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

driver=webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")

#鼠标悬停至“设置”链接
link=driver.find_element_by_link_text('设置')
ActionChains(driver).move_to_element(link).perform()

#打开搜索设置
driver.find_element_by_link_text("搜索设置").click()

#保存设置
driver.find_element_by_class_name("prefpanelgo").click()
time.sleep(2)

#接受警告框
driver.switch_to_alert().accept()

driver.quit()

move_to_element()鼠标悬停的使用,将鼠标悬停在“设置”链接上,然后在弹出的下拉菜单中单击“搜索设置”按钮,设置完成后单击“保存设置”,弹出保存确认警告框。通过switch_to_alert()方法获取当前页面上的警告框,并使用accept()方法接受警告框。

解散警告框.py
from time import ctime,sleep
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
ydong = driver.find_element_by_xpath("//*[@id='u1']/a[8]") #点击百度设置
sleep(1)
ActionChains(driver).move_to_element(ydong).perform()
driver.find_element_by_link_text("搜索设置").click()
sleep(1)
driver.find_element_by_xpath("//*[@id='gxszButton']/a").click()
driver.switch_to_alert().dismiss() #解散该警告框
#driver.switch_to_alert().accept() #确认
driver.quit()

1.在警示框出来之后,切换至警示框

e_alter = driver.switch_to_alter()

2. 获取警示框的文字

e_alter.text() print e_alter.text()

3. 点击确定

e_alter.accept()

#或者点击取消|x 按钮

e_alter.dismiss()

4.最后一种prompt类型的有输入框的可以进行值输入

e_prompt = driver.swtich_to_alter() e_prompt.send_keys("输入一个值")

为了便于显示switch_to_alter()方法,下面我这边写了一个小小的页面,这里我把三种对话框全部包括下来,然后来进行模拟实际过程中遇到的对话框。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <title></title>
    </head>
    <body>
        <div align="center">
        <h4>hello girl</h4>
        <input type="button" οnclick="showPro()" value="输入框弹窗按钮"/>
        <input type="button" οnclick="showAlert2()" value="提示弹窗按钮"/>
        <input type="button" οnclick="showAlert()" value="确认弹窗按钮"/><br><br><br>
        <span id="textSpan"></span>
        
        </div>
    </body>
    <script>
        function showAlert(){            
            document.getElementById("textSpan").innerHTML="";
            if(confirm("你是帅哥吗?")){
                document.getElementById("textSpan").innerHTML="<font style='color: red;'>您为何如此自信?</font>";
            }else{
                document.getElementById("textSpan").innerHTML="<font style='color: red;'>您为何如此谦虚?</font>";
            }
            
        }
        function showPro(){
            document.getElementById("textSpan").innerHTML="";
            con = prompt("输入1为强哥聪明,输入2为左哥笨");
            if(con==1){
                document.getElementById("textSpan").innerHTML="<font style='color: green;'>强哥是真聪明啊</font>";
            }else if(con==2){
                document.getElementById("textSpan").innerHTML="<font style='color: green;'>左哥是真笨啊</font>";
            }else{
                document.getElementById("textSpan").innerHTML="<font style='color: red;'>您没有按要求输入,请重新输入</font>";
            }
        }
        function showAlert2(){
            document.getElementById("textSpan").innerHTML="";
            alert("用我三世烟火,换你一世迷离");
        }
    </script>
</html>

下面的三个例子,主要来演示如何处理上面说的三种对话框。 

 1.处理alert对话框。

#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/alter.html')
'''获取alert对话框的按钮,点击按钮,弹出alert对话框'''
driver.find_element_by_xpath('/html/body/div/input[2]').click()
'''获取alert对话框'''
alert = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
'''获取警告对话框的内容'''
print (alert.text)  #打印警告对话框内容
alert.accept()   #alert对话框属于警告对话框,我们这里只能接受弹窗
'''添加等待时间'''
time.sleep(2)
driver.quit()

 2.处理confirm对话框

#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/hunk/Desktop/alter.html')
'''获取confirm对话框的按钮,点击按钮,弹出confirm对话框'''
driver.find_element_by_xpath('/html/body/div/input[3]').click()
'''获取confirm对话框'''
dialog_box = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
'''获取对话框的内容'''
print (dialog_box.text)  #打印警告对话框内容
'''点击【确认】显示"您为何如此自信?"'''
dialog_box.accept()   #接受弹窗
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)
time.sleep(2)
'''再次获取confirm对话框的按钮,点击按钮,弹出confirm对话框'''
driver.find_element_by_xpath('/html/body/div/input[3]').click()
'''再次获取confirm对话框'''
dialog_box = driver.switch_to_alert()
'''点击【取消】显示"您为何如此谦虚?"'''
time.sleep(2)
dialog_box.dismiss()  #关闭获取取消对话框
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)
driver.quit()

3.处理prompt对话框

#-*-coding:utf-8 -*-
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
'''获取对话框输入2,并且点击【确认】,文本框内提示<左哥是真笨啊>,点击【取消】文本框内提示<您没有按要求输入,请重新输入>'''
driver.get('file:///C:/Users/corrine/Desktop/alert.html')
'''获取prompt对话框的按钮,点击按钮,弹出confirm对话框'''
driver.find_element_by_xpath('/html/body/div/input[1]').click()
'''获取prompt对话框'''
dialog_box = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
'''获取对话框的内容'''
print (dialog_box.text)  #打印警告对话框内容
dialog_box.send_keys("2")  #弹出框内输入2
dialog_box.accept()  #接受
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)  #获取关闭弹窗结果  #获取确认弹窗结果
'''这里等待几秒在测试取消'''
time.sleep(2)
#************************点击【取消】,并且获取显示结果**********************
driver.find_element_by_xpath('/html/body/div/input[1]').click()
'''获取prompt对话框'''
dialog_box = driver.switch_to_alert()
'''添加等待时间'''
time.sleep(2)
dialog_box.dismiss()  #关闭对话框
print (driver.find_element_by_xpath('//*[@id="textSpan"]/font').text)  #获取关闭弹窗结果
time.sleep(2)
driver.quit()
发布了30 篇原创文章 · 获赞 7 · 访问量 6786

猜你喜欢

转载自blog.csdn.net/w68688686/article/details/103989052
今日推荐