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')        #输入旧密码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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