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里边的某一个元素的方法定位此元素。

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

你可能感兴趣的:(Web页面特殊位置处的元素操作)