Web页面特殊位置处的元素操作

弹框

弹框在网页中是属于非常常见的一种元素了。弹框一般包含一个蒙版,一个主体及一个关闭入口,常见于网页及移动端。其好处是让用户更聚焦,且不用离开当前页面,更快更容易完成任务。JavaScript实现的三种弹出框有

alert警告框,只有一个按钮“确定”无返回值,警告框经常用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。

confirm确认框,两个按钮,确定或者取消,返回true或false。确认框用于使用户可以验证或者接受某些信息。当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。

prompt提示框,返回输入的消息,或者其默认值提示框经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

selenium+python进行自动化测试的时候,对于alert弹框,其定位操作方法为

    alert = driver.switch_to_alert()

alert.accept();   #确定

     alert.dismiss();  #取消

alert.getText();  #取到文本内容

 实际系统中,弹出窗口必定是某些操作完成、信息加载之后用做提示,因此弹出窗口有时出现得快,有时出现得慢,直接使用driver.switchTo().alert();很容易出现执行失败的情况,可以适当增加延时。

如果alert弹窗没有被处理,而继续运行后面的代码,将抛出UnexpectedAlertPresentException。

File"E:\Python27\selenium\webdriver\remote\errorhandler.py", line 241, incheck_response

    raiseexception_class(message, screen, stacktrace, alert_text)

UnexpectedAlertPresentException: Alert Text: None

Message: unexpected alert open: {Alert text : 请填写验证码}

为避免以上错误,You need toswitch to the alertandaccept it。

除了alert框,其他情形先要确定是不是alert,是才能用,不是的话肯定不能用这种方法。

有些弹出框是div层,这种跟平常定位方法一样

~有些弹出框是嵌套的iframe层,这种切换iframe就可以了。

有些弹出框是嵌入的一个窗口,通过打印获取全部的窗口句柄,确认是不是有两个handle,如果是,则这个表面上看起来是一个窗口,实际上内嵌了另外一个窗口,那么先切换到新的窗口上,然后用平常的定位方法就可以了。

iframe

由于需要定位的元素在某一个iframe里边,所以有时通过单独的id/name/xpath还是定位不到此元素,所以需要先通过定位iframe然后再定位iframe里边的某一个元素的方法定位此元素。

<div class="content" style="padding: 37px 5px 5px;">

<iframe width="570" height="250" frameborder="0" src="/main/account/pass" id="passwd-change">

<html lang="zh">

<title>xxxxxx</title>

<head>

<meta content="text/html;charset=utf-8" http-equiv="Content-Type">

<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">

</head>

<body class="metro">

<form method="post" autocomplete="off">

<style>

body{background-color:#fff;height:auto;}

.metro .grid {border: 0;padding-bottom:0;}

.metro .grid td.label { padding: 10px 10px 10px 0;}

</style>

<div style="width:530px;margin:0px auto;" class="metro container">

<div class="grid">

<fieldset>

<input type="hidden" id="id">

<p>密码应是6-20位且至少同时包含字母和数字</p>

<table class="ns">

<tbody>

<tr>

<td class="label">原密码:</td>

<td width="440px">

<div class="input-control text"><input type="password" tabindex="1" autofocus="" id="oldpassword" name="oldpassword"></div>

</td>

</tr>

<tr>

<td class="label">新密码:</td>

<td width="440px">

<div class="input-control password"><input type="password" tabindex="2" id="newpassword" name="newpassword">

<button class="btn-reveal" tabindex="-1" type="button"></button></div>

</td>

</tr>

<tr>

<td class="label">再次输入:</td>

<td width="440px">

<div class="input-control password"><input type="password" tabindex="3" id="repassword" name="repassword">

<button class="btn-reveal" tabindex="-1" type="button"></button></div>

</td>

</tr>

</tbody>

</table>

<input type="hidden" value="1ce1b43b4eb69d49552a0e95178ff2c5" name="Qmhwfv7csNyuND1k" id="token">

<div style="margin-top: 10px"></div>

<div style="width:150px;margin:0 auto;text-align:right;">

<input type="button" tabindex="4" value="确定" class="button large radius" id="save">

<input type="button" tabindex="5" value="取消" class="button large radius" style="margin-left:15px" id="cancel">

</div>

<div style="margin-top: 5px"></div>

</fieldset>

</div>

</div>

</form>

<script type="text/javascript">

change_pass();

</script>

<script>

var global = {"username":"admin","user_id":"1"};

</script>

</body>

</html>

</iframe>

</div>

    定位iframe内的“修改密码”页面元素的python代码

from time import sleep

from selenium import webdriver

browser=webdriver.Firefox()

browser.get("https://10.203.10.115")

browser.find_element_by_xpath("//input[@tabindex=string(1)]").send_keys('admin')

browser.find_element_by_xpath("//input[@id='password']").send_keys('cloud@2015')

browser.find_element_by_class_name("login_form_submit").click()

sleep(2)                                      #等待2s,等待页面完全跳转

browser.find_element_by_id(‘useradmin’).click()

………….

browser.switch_to_frame("passwd-change")                    #切换iframe

browser.find_element_by_id("oldpassword").send_keys('cloud@2015')        #输入旧密码

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

推荐阅读更多精彩内容

  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,584评论 0 7
  • 11.1.使用JavaScript操作页面元素 #构造JavaScript查找百度首页的搜索输入框的代码字符串: ...
    約見阅读 2,876评论 0 0
  • 一、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位,对于frame/ifra...
    小仙女本人呀阅读 42,077评论 2 27
  • 前段时间筹备新机构的时候又翻回春华机构筹备时候的资料。两年多了,看回当初写的东西竟让我目瞪口呆,不敢相信当初的...
    学智思阅读 191评论 0 2
  • 每一次感到失望,伤心时,我总会想想自己向往的生活,仿佛那样,能让我的失望减少一点,对未来的希望增加一点。 ...
    橙小熙ing阅读 260评论 0 1