博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium-webdriver系列教程(10)——如何智能的等待页面加载完成
阅读量:4049 次
发布时间:2019-05-25

本文共 1672 字,大约阅读时间需要 5 分钟。

web的自动化测试中,我们经常会遇到这样一种情况:点击1个按钮,页面上会弹出1个iframe,这时候脚本就需要去等待iframe加载完毕才能进行后续的操作。

在这种情况下,我们一般的处理思路是等待被等待对象上的某个子元素出现,当这个子元素出现时我们就认为该对象已经加载完毕,代码可以继续往下执行了。

selenium-webdriver为我们提供了一个Wait类来完成类似的等待功能。

下面的html代码实现了这样的一种效果:点击click按钮5秒钟后,页面上会出现一个红色的div块。我们需要写一段自动化脚本去捕获这个出现的div,然后高亮之。

set_timeout.html
  
<html>
    
<head>
        
<title>Set Timeout</title>
        
<style>
            
.red_box {background-color: red; width =
20
%; height: 100px; border: none;}
        
</style>
        
<script>
            
function show_div(){
                
setTimeout(
"create_div()"
,
5000
);
            
}
  
            
function create_div(){
                
d = document.createElement(
'div'
);
                
d.className =
"red_box"
;
                
document.body.appendChild(d);
            
}
        
</script>
    
</head>
    
<body>
        
<button id =
"b"
onclick =
"show_div()"
>click</button>
    
</body>
</html>

下面的代码实现了高亮动态生成的div块的功能:

require
'rubygems'
require
'selenium-webdriver'
  
dr = Selenium::WebDriver.
for
:firefox
select_file =
'file:///'
.concat
File
.expand_path(
File
.join(
File
.dirname(
__FILE__
),
'set_timeout.html'
))
dr.navigate.to select_file
  
dr.find_element(
:id
=>
'b'
).click
wait = Selenium::WebDriver::Wait.
new
({
:timeout
=>
30
})
box = wait.
until
{dr.find_element(
:css
=>
'.red_box'
)}
dr.execute_script(
'arguments[0].style.border = "5px solid yellow"'
, box)
#div will be highlight

Wait类的构造方法Wait.new接收1个hash参数。上面代码中使用:timeout这个key值表示最长等待时间

Wait类的until方法接收1个block代码块,如果代码块返回值不为true的话,该方法将一直等待直到达到最长等待时间为止。如果一旦代码块中的值为true了,则返回该代码块的返回值。 box = wait.until {dr.find_element(:css => '.red_box')}的作用就是等待class为red_box的div出现并返回该div对象。

进一步的思想下,如果某些页面在加载完成后会执行一些js函数,这些函数会延迟对dom树进行一些操作或者进行一些异步请求的处理,那么webdriver目前是无法智能的等待这些函数执行完毕的,所以有时候就会出现页面在没有加载完毕的情况下(实际上dom已经加载完毕,只是异步请求或延迟函数正在执行),webdriver继续进行后续代码的执行情况。这时候我们就需要灵活的使用Wait类进行等待了。

还是需要等待时间来判断的,如果超时则退出。

转载地址:http://ckjci.baihongyu.com/

你可能感兴趣的文章
误传了数千年的几个名句
查看>>
韩复榘经典语录
查看>>
厅、部、局、司区分大小
查看>>
VS2005中使用C#编写MDI窗口根据子窗口个数控制菜单项的enabled属性
查看>>
北川邓家“刘汉小学”无一死亡奇迹背后的真相
查看>>
救灾,从来没有胜利
查看>>
.net 2.0中ConfigurationManager替代了原来的ConfigurationSettings
查看>>
Asp.net 2.0中使用Datawindow.net2.0
查看>>
常用命名法:骆驼命名法,匈牙利命名法和帕斯卡命名法
查看>>
Server.MapPath方法测试结果
查看>>
Asp.net 默认配置下,Session莫名丢失的原因及解决办法
查看>>
Datawindow.net中如何使用Calendar控件
查看>>
如何在Datawindow.net中实现让当前行选中,并且当前行以其他颜色显示
查看>>
Datawindow.net如何使用导航栏
查看>>
如何利用Datawindow.net提取Sequence数据
查看>>
小诗,纪念我即将到来的结婚两周年
查看>>
自勉文[出处不详,待考证]
查看>>
中国行政级别
查看>>
国家公务员的级别
查看>>
悼念地震死难者:使整个网页变黑白色(灰色)的特效代码
查看>>