web自动化测试第10步:获取浏览器弹窗alert、自定义弹窗以及其操作

摘要:
在正常测试中,有时会遇到弹出问题。有些是浏览器弹出窗口,有些是自定义弹出窗口;在本节中,我们将主要讨论浏览器弹出窗口和简单的自定义弹出窗口。“,alert_text)”“def__init__:”“CreatesanewAlert.:参数:-driver:执行用户操作的WebDriverinstance.”“self。”。驱动程序=driver@propertydeftext:“”“获取警报的文本。”“”“returnself.driver.execute[”value“]defdisease:”“”。executedfsend_keys:“”“将密钥发送到警报。:参数:-keysToSend:要发送到警报的文本。“”“ifself.driver.w3c:self.driver.executeelse:self.driveer.executedefauthenticate:”“”“将用户名/密码发送到经过身份验证的对话框。隐含地“单击”用法::driver。”。切换到警报。authenticate:参数:-username:字符串位于对话框密码的用户名部分:字符串位于密码“”的密码部分self.driver.executeself.accept()3。示例显示:许多网站不使用w3c警报页面,因此我们必须使用w3c页面来演示警报包中的方法。具体代码如下:fromsenium import webdriver fromtimeimportsleepdriver=webdriver。Chrome()驱动程序。获取(“http://www.w3school.com.cn/tiy/t.asp?

在平时的测试中,有时候会遇到弹窗的问题,有的是浏览器弹窗(alert)、有的是自定义弹窗;这节我们主要来讨论一下关于浏览器弹窗和简单的自定义弹窗。

1.关于alert弹窗的方法

switch_to_alert(): 定位到alert弹窗,返回一个弹窗的对象

dismiss(): 对弹窗对象的取消操作(相当于点击弹窗上的取消按钮)

accept():对弹窗对象的确定操作(相当于点击弹窗上的确定按钮)

text:对弹窗对象,获取弹窗内的文本

send_keys(key):对弹窗对象内的输入框输入数据(如果弹窗的格式有输入框的话可以使用)

authenticate(name, pass):对于身份认证弹窗,输入用户名和密码并自动提交(一般可能会用于本地搭建的一些系统)如图:

认证信息


2.alert包的源码展示

class Alert(object):
    """
    Allows to work with alerts.

    Use this class to interact with alert prompts.  It contains methods for dismissing,
    accepting, inputting, and getting text from alert prompts.

    Accepting / Dismissing alert prompts::

        Alert(driver).accept()
        Alert(driver).dismiss()

    Inputting a value into an alert prompt:

        name_prompt = Alert(driver)
        name_prompt.send_keys("Willian Shakesphere")
        name_prompt.accept()


    Reading a the text of a prompt for verification:

        alert_text = Alert(driver).text
        self.assertEqual("Do you wish to quit?", alert_text)

    """

    def __init__(self, driver):
        """
        Creates a new Alert.

        :Args:
         - driver: The WebDriver instance which performs user actions.
        """
        self.driver = driver

    @property
    def text(self):
        """
        Gets the text of the Alert.
        """
        return self.driver.execute(Command.GET_ALERT_TEXT)["value"]

    def dismiss(self):
        """
        Dismisses the alert available.
        """
        self.driver.execute(Command.DISMISS_ALERT)

    def accept(self):
        """
        Accepts the alert available.

        Usage::
        Alert(driver).accept() # Confirm a alert dialog.
        """
        self.driver.execute(Command.ACCEPT_ALERT)

    def send_keys(self, keysToSend):
        """
        Send Keys to the Alert.

        :Args:
         - keysToSend: The text to be sent to Alert.


        """
        if self.driver.w3c:
            self.driver.execute(Command.SET_ALERT_VALUE, {'value': keys_to_typing(keysToSend)})
        else:
            self.driver.execute(Command.SET_ALERT_VALUE, {'text': keysToSend})

    def authenticate(self, username, password):
        """
        Send the username / password to an Authenticated dialog (like with Basic HTTP Auth).
        Implicitly 'clicks ok'

        Usage::
        driver.switch_to.alert.authenticate('cheese', 'secretGouda')

        :Args:
         -username: string to be set in the username section of the dialog
         -password: string to be set in the password section of the dialog
        """
        self.driver.execute(
            Command.SET_ALERT_CREDENTIALS,
            {'username': username, 'password': password})
        self.accept()

3.实例展示:w3c的alert页面

因为目前使用alert页面的网站实在是不多,所以只好用w3c的页面来示范一下alert包中的方法,具体代码如下

alert-w3c

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://www.w3school.com.cn/tiy/t.asp?f=jseg_prompt")

# 通过frame的name值来定位
driver.switch_to_frame("i")

# 点击按钮触发弹窗
ele = driver.find_element_by_css_selector("body > input[type='button']")
ele.click()
sleep(2)

# 定位到到弹窗
a = driver.switch_to_alert()
print(driver)
# 获取弹窗的内容
print(a.text)

# 触发取消按钮
a.dismiss()
sleep(2)

# 再次点击按钮触发弹窗
ele.click()

# 在弹窗中的输入框输入数据
a.send_keys("许西城")
sleep(2)

# 触发确认按钮
a.accept()

这样就是alert的具体演示了

4.普通的简单弹窗

平时的话,我们一般遇到的都是自定义弹窗,所以说一般不是不用到alert的,但是还是要拿出来说一下的;一般这种自定义弹窗是自定义的div层,然后是隐藏的,所以当你触发了这个弹窗后,它就会显示出来,这时我们通过正常的定位方式是可以正常定位到的。

下面就主要看一下百度的登录弹窗

百度-登录


代码展示:

from selenium import webdriver
from time import sleep
# 打开谷歌浏览器
driver = webdriver.Chrome()

# 输入网址并访问
driver.get("https://www.baidu.com/")

# 点击登录按钮
driver.find_element_by_css_selector("#u1 > a.lb").click()
sleep(2)

# 定位登录弹窗的输入框,并输入数据
name_box = driver.find_element_by_css_selector("#TANGRAM__PSP_10__userName")
name_box.send_keys("name")


免责声明:文章转载自《web自动化测试第10步:获取浏览器弹窗alert、自定义弹窗以及其操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用Rufus制作PROXMOX VE 安装优盘的步骤LibTorch实战六:U2-Net实战部署<三>下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CentOS7 添加FTP用户并设置权限

step 1 安装配置Vsftp服务器 一、配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。 1、关闭firewall: systemctl stop firewalld.service#停止firewall systemctl disable firewalld.ser...

前端不为人知的一面--前端冷知识集锦 前端已经被玩儿坏了!像console.log()可以向控制台输出图片

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来。现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容。 HTML篇 浏览器地址...

前端用js获取本地文件的内容

这里要写成input的形式 调用upload函数 传递的参数就表示所选的文件<input type="file" onchange="upload(this)" /> //前端读取本地文件的内容 下面代码中的this.result即为获取到的内容 function upload(input) { //支持chrome IE10...

ExtJS初学笔记---Ext.Msg.alert无效果

最近开始学ExtJS,书上的第一个例子是: 1 2 3 Ext.onReady(function(){     Ext.Msg.alert('Hello.', 'Hello'); }); 这个是ExtJS最简单的一个例子了,就是在页面上显示一个对话框,可是我运行却什么都没有显示。。。 在浏览器开发者工具的控制台中有如下错误信息: (...

selenium 难定位元素,时间插件,下拉框定位,string

1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: findElement(By.xpath(“”)); 通过元素的标签名称定位元素: findElement(By.tagName(“”)); 通过元素的链接名称...

js给dropdownlist添加选项

<input name="" type="text" /> <input name="" type="button" value="创建新目录" onclick="newDir()" /> Js代码 <script type="text/javascript"> ////创建新目录 f...