webdriver get cookie中关于driver.navigate.to和driver.get使用的区别

在做一个后台管理系统的自动化测试,在登录时遇到了一些问题,比如浏览器认为当前url不安全,会有一个拦截,无法直接打开登录页面。这里用到了driver.navigate().to()方法,特此mark下。下面是查询资料的收获:
最近用一个实际的项目在学习Webdriver,关于新建一个备份任务的过程,先是有一个父页上button弹开一个子页,总共有4个子页,必须前一个页上的必填信息录完,才能在这个页面触发下一个子页。
如果在baseUrl1第一个子页录完信息,第一个子页有重命名校验和必填项校验。
进入baseUrl2第2个子页,用driver.navigate().to(baseUrl2),直接跳转到第2个页,不受第一个子页的约束,直接导航到第2个页面的输入。
这样会导致什么问题,第一个子页的信息是没有经过校验就进入下一个子页。这样,除了上面的重命名没有校验外,另外信息是否已经进入后台保存也是没有管的,而是直接在前台操作上直接进入下一个页面的操作,导致后台有可能数据丢失的情况,webdriver只管了前台界面的操作。
怎么避免后台数据丢失呢,那么就不能用:driver.navigate().to(baseUrl2)方法,这种方法太危险,不管实际的页面逻辑。
改用:driver.get(driver.getCurrentUrl()),这样通过实际的页面逻辑来获取URL结果,原理是当页面校验在前、后台通过后,点击&下一步&触发第二个子页时,会给出第二个子页的URL地址;如果页面校验在前、后台没有通过,那么就触发不了第二个页面,也就获得不了第二个页的URL地址,那么用driver.getCurrentUrl(),就获得不了最新页面的地址,也就无法跳转到第2个页面。如此,用driver.get(driver.getCurrentUrl())这样操作就保证跟页面的逻辑对应起来。也就不会脚本运行完成后,出现备份任务有时生成有时没有生成的情况。
调整到后面的子页,也是用相同的方法:driver.get(driver.getCurrentUrl());
但到第4个子页调整到父页时就不能用这个方法,因为driver.getCurrentUrl()这个获取不到父页的URL地址。只能再用一下driver.navigate().to(fatherURl),用这个方法,只要保证最后一个子页信息录入不存在丢失情况,就不影响备份任务单据的生成了。
阅读(...) 评论()webdriver|LOFTER(乐乎) - 记录生活,发现同好
LOFTER for ipad —— 记录生活,发现同好
&nbsp&nbsp被喜欢
&nbsp&nbsp被喜欢
{list posts as post}
{if post.type==1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type==2}
{if post.type == 3}
{if !!post.image}
{if post.type == 4}
{if !!post.image}
{if !!photo.labels && photo.labels.length>0}
{var wrapwidth = photo.ow < 500?photo.ow:500}
{list photo.labels as labs}
{var lbtxtwidth = Math.floor(wrapwidth*(labs.ort==1?labs.x:(100-labs.x))/100)-62}
{if lbtxtwidth>12}
{if !!labs.icon}
{list photos as photo}
{if photo_index==0}{break}{/if}
品牌${make||'-'}
型号${model||'-'}
焦距${focalLength||'-'}
光圈${apertureValue||'-'}
快门速度${exposureTime||'-'}
ISO${isoSpeedRatings||'-'}
曝光补偿${exposureBiasValue||'-'}
镜头${lens||'-'}
{if data.msgRank == 1}{/if}
{if data.askSetting == 1}{/if}
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post_index < 3}
{if post.type == 1 || post.type == 5}
{if !!post.title}${post.title|escape}{/if}
{if !!post.digest}${post.digest}{/if}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
{if drlist.length>0}
更多相似达人:
{list drlist as dr}{if drlist.length === 3 && dr_index === 0}、{/if}{if drlist.length === 3 && dr_index === 1}、{/if}{if drlist.length === 2 && dr_index === 0}、{/if}{/list}
暂无相似达人,
{if defined('posts')&&posts.length>0}
{list posts as post}
{if post.type == 2}
{if post.type == 3}
{if post.type == 4}
{if post.type == 6}
this.p={ currentPage:1,pageNewMode:true,isgooglead3:false,ishotrecompost:false,visitorId:0, first:'',tag:'webdriver',recommType:'new',recommenderRole:0,offset:14,type:0,isUserEditor:0,};[转载]Python版:Selenium2.0之WebDriver学习总结
在看到Selenium2.0之WebDriver学习总结是使用JAVA实现的,一边学习一边使用翻译成Python实现。
&一、命令和操作
这一部分将介绍一下WebDriver的一些具体操作和命令,实际操作中,我们需要两大工具来帮助我们:FireBug和Xpath工具,这两者都是Firefox上的插件。接下来我们所讲解的都是以Firefox为基础的,且基于driver=webdriver.Firefox();创建的一个driver实例:
& 访问一个页面
你想使用WebDriver做的事情肯定是访问一个页面,最基础的方法是调用“get”方法:
Selenium官方文档对 driver.get&的说明:
The driver.get method will navigate to a page given by the
URL. WebDriver will wait until the page has fully loaded (that is,
the “onload” event has fired) before returning control to your test
or script. It’s worth noting that if your page uses a lot of AJAX
on load then WebDriver may not know when it has completely
driver.get方法将浏览指定的URL页面。
webdriver的保持等待状态,直至页面完全加载完成(即“onload”事件已被解雇),然后将控制返回执行后续测试或脚本。值得一提的是,但是如果你的页面存在很多的AJAX加载,此时WebDriver是无法知道是否完成加载。
driver.get("");
检查此类页面是否加载完成,那么我们就需要Explicit和Implicit
Wait(这两个将在后面文章解释)
在WebDriver的JAVA版本中有一个driver.navigate().to("")的方法,也是等待页面所有内容加载完成在执行后续脚本。但Python的版本中driver.get已经实现了这功能。
& 定位UI元素
WebDriver可以通过WebDriver实例来定位元素,任何语言库都含有“Find Element”和“Find
Elements”的方法。第一个方法返回一个WebElement或者抛出异常。后者返回所有WebElement的列表,或者空列表。
获取和定位元素我们调用“By”方法。下面具体解释下“By”方法:
这是一个极为有效定位元素的方法。普遍的现状是UI工程师在实际编写页面时很少写id或者自动生产一个ID,这些都是需要避免的。对于一个页面Element来说,class比自动生产的id更好。
通过id定位元素的例子:
&input type="text" name="passwd" id="passwd-id" /&
element = driver.find_element_by_id("passwd-id")
&By Class Name
这里的class指的是DOM中的元素,在实际使用过程中,我们也会发现很多DOM元素含有相同的class名。
通过class name定位元素例子:
&div class="cheese"&
&span&Cheddar&/span&
&div class="cheese"&
&span&Gouda&/span&
element&=driver.find_elements_by_class_name("cheese")
By Tag Name
DOM的Tag元素
用Tag name 定位元素的例子:
src="..."&&/iframe&
driver.find_elements_by_tag_name("iframe")
&input type="text" name="passwd" id="passwd-id" /&
element = driver.find_element_by_name("passwd")
&By Link Text
&p&Are you sure you want to do this?&/p&
&a href="continue.html"&Continue&/a&
&a href="cancel.html"&Cancel&/a&
continue_link = driver.find_element_by_link_text('Continue')
continue_link =
&By Partial Link Text
根据链接的部分文字
&html& &body& &p&Are you sure you want to do this?&/p& &a href="continue.html"&Continue&/a& &a href="cancel.html"&Cancel&/a& &/body& &html&
driver.find_element_by_partial_link_text('Conti')
从名字上看,这是根据CSS来定位元素。
id="food"&
class="dairy"&milk&/span&
&&span class="dairy
aged"&cheese&/span&
driver.find_element_by_css_selector("#food span.dairy aged")
在高级的水平下,WebDriver尽可能使用浏览器的原生的XPath能力。在那些没有原生的XPath支持的浏览器,我们提供自己的实现方式。但是三个Driver有一定的区别。
& &form id="loginForm"&
& &&input name="username" type="text" /&
& &&input name="password" type="password" /&
& &&input name="continue" type="submit" value="Login" /&
& &&input name="continue" type="button" value="Clear" /&
& &第一种方法是Xpath指定绝对路径
login_form = driver.find_element_by_xpath("/html/body/form[1]")&
&第二种方法是Xpath指定form的第一元素(Xpath定位是从1开始的)
login_form = driver.find_element_by_xpath("//form[1]")
& &第三种方法是Xpath指定表单元素与属性命名编号
&login_form&=driver.find_element_by_xpath("//form[@id='loginForm']")
经验原则:WebDriver在使用中的XPath时,不应该期望能够对这些隐含属性相匹配。
选择某一个选项:
=&driver.find_element_by_tag_name("select")
select.deselect_all();
select.deselect_by_visible_text("Edam");
用户表单填充
遍历select标签:
driver.find_element_by_tag_name("select")
all_options
=select.find_element_by_tag_name("option")
for option in
all_options:
print "Value is:
%s" % option.get_attribute("value")
option.click()
上传文件:
driver.find_element_by_id("upload")
filePath =
"C:test\uploadfile\media_ads\test.jpg"
FileUpload.send_keys(filePath)
driver.find_element_by_id("upload").submit()
拖拽操作:
element=driver.find_element_by_name("source")
target=driver.find_element_by_name("target")
driver.dragdrop(element,target)
Windows和Frames之间的切换
一些web应用程序有许多Frames或多个Windows。
WebDriver支持使用“switchTo”的方法实现的窗口之间切换。
driver.switch_to_window("windowName")
所有对driver的调用都会指向特定的窗口,但是我们怎么知道窗口的名字呢?我们可以查看javascript代码和打开他的链接:
&a href="somewhere.html" target="windowName"&Click here to open a new window&/a&
另外,还可以通过“window
handle”去调用“switchTo().window()”,通过这个,我们就遍历来找到所有打开的窗口:
for handle in
driver.window_handles:
driver.switch_to_window(handle);
Switch同样支持frame:
driver.switch_to_frame('frame_name')
driver.switch_to_frame(1)
从selenium2.0开始,已经支持对弹出框的获取
alert=driver.switch_to_alert()
这个方法会返回当前被打开打警告框,你可以进行统一,取消,读取提示内容,后则进入到提示,这个同样使用alerts,confirms,prompts。
&Navigation:History and
之前我说过在JAVA版Selenium API中还有&"navigate().to()"来进行打开网页,在WebDriver的小接口中Navigation就是其中之一,所以和get()不同的是Navigation可以进行的前进后退操作:
driver.navigate().forward();
driver.navigate().back();&
那Python的Selenium API呢,虽然它没有&Navigation,但还可以进行浏览器的前进后退操作:
driver.forward()
driver.back()
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 webdriver get 超时 的文章

 

随机推荐