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

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

一、关于alert弹窗的方法

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

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

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

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

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

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

二、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()

三、实例:w3c的alert页面

代码展示:

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的,但是还是要拿出来说一下的;一般这种自定义弹窗是自定义的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")

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352