selenium之 浏览器导航栏的三个按钮(back、forward、refresh)

来源:互联网 发布:上古卷轴5男捏脸数据 编辑:程序博客网 时间:2024/06/09 19:36

今天这几个方法非常简单,就是我们能看到的浏览器导航栏的三个按钮:后退、前进、刷新

导航栏按钮

driver.back() 
driver.forward() 
driver.refresh()

不多说,上代码试试

# -*- coding: utf-8 -*-from selenium import webdriverfrom time import sleepdriver = webdriver.Firefox()driver.maximize_window()driver.get('http://www.baidu.com')print 'base_url: ', driver.current_urldriver.find_element_by_id('kw').send_keys(u'selenium 灰蓝')driver.find_element_by_id('su').click()sleep(2)print 'after search: ', driver.current_urldriver.back()  # backprint 'back to: ', driver.current_urldriver.forward()  # forwardprint 'forward to: ', driver.current_urlsleep(2)driver.refresh()  # refreshprint 'refresh: ', driver.current_urlsleep(2)driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

结果: 
明显能够看到浏览器的后退、前进与刷新的动作。

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=selenium%20%E7%81%B0%E8%93%9D&rsv_pq=f88ee279000319b4&rsv_t=3537ECuJsvn8biOOxAemTJhRgJA9fRB%2FgYyaBy3sdcQagRhU5jOqEDICoQI&rqlang=cn&rsv_enter=0&rsv_sug3=11&inputT=266&rsv_sug4=266https://www.baidu.com/https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=selenium%20%E7%81%B0%E8%93%9D&rsv_pq=f88ee279000319b4&rsv_t=3537ECuJsvn8biOOxAemTJhRgJA9fRB%2FgYyaBy3sdcQagRhU5jOqEDICoQI&rqlang=cn&rsv_enter=0&rsv_sug3=11&inputT=266&rsv_sug4=266https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=selenium%20%E7%81%B0%E8%93%9D&rsv_pq=f88ee279000319b4&rsv_t=3537ECuJsvn8biOOxAemTJhRgJA9fRB%2FgYyaBy3sdcQagRhU5jOqEDICoQI&rqlang=cn&rsv_enter=0&rsv_sug3=11&inputT=266&rsv_sug4=266
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

那么什么时候会用呢?

一种情况就是,当你从一个父页面跳转到子页面进行操作,操作完之后没有“返回”之类的按钮或链接,重新进入父页面又很麻烦,back()可以帮你。forward()与此类似,相对没有back()那么常用。

当你修改了页面信息但是没有即时刷新时,可以手动refresh()。

不过需要注意:

当你前进并退回原来的页面或刷新页面之后,页面的元素id是改变了的。不要妄图用原来定位好的WebElement去操作现在的页面元素!否则会出现如下报错: 
selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked up

代码示例下:

# -*- coding: utf-8 -*-from selenium import webdriverdriver = webdriver.Firefox()driver.maximize_window()driver.get('http://www.baidu.com')kw = driver.find_element_by_id('kw')print kw  # 原页面元素IDdriver.refresh()print driver.find_element_by_id('kw')  # 刷新之后的kw元素IDkw.send_keys('csdn')  # 再用原来的元素ID去操作就会抛出异常driver.quit()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

来看看输出结果:

<selenium.webdriver.remote.webelement.WebElement (session="19a16be7-f885-4454-aa44-065b35d8377f", element="{307bfd7c-bcb8-4bed-a0f0-164924e9f648}")><selenium.webdriver.remote.webelement.WebElement (session="19a16be7-f885-4454-aa44-065b35d8377f", element="{8eac4fb5-4c8f-4141-b9d5-2ced9b412388}")>Traceback (most recent call last):  File "D:/Code/py files/zhigou/zhigou_framework/test/UI_test/case/testnavigation.py", line 16, in <module>    kw.send_keys('csdn')  # 再用原来的元素ID去操作就会抛出异常  File "C:\APP\Python2.7.10\lib\site-packages\selenium\webdriver\remote\webelement.py", line 334, in send_keys    self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': typing})  File "C:\APP\Python2.7.10\lib\site-packages\selenium\webdriver\remote\webelement.py", line 469, in _execute    return self._parent.execute(command, params)  File "C:\APP\Python2.7.10\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute    self.error_handler.check_response(response)  File "C:\APP\Python2.7.10\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response    raise exception_class(message, screen, stacktrace)selenium.common.exceptions.StaleElementReferenceException: Message: Element not found in the cache - perhaps the page has changed since it was looked upStacktrace:    at fxdriver.cache.getElementAt (resource://fxdriver/modules/web-element-cache.js:9407)    at Utils.getElementAt (file:///c:/users/zx/appdata/local/temp/tmpsorvob/extensions/fxdriver@googlecode.com/components/command-processor.js:8992)    at fxdriver.preconditions.visible (file:///c:/users/zx/appdata/local/temp/tmpsorvob/extensions/fxdriver@googlecode.com/components/command-processor.js:10043)    at DelayedCommand.prototype.checkPreconditions_ (file:///c:/users/zx/appdata/local/temp/tmpsorvob/extensions/fxdriver@googlecode.com/components/command-processor.js:12597)    at DelayedCommand.prototype.executeInternal_/h (file:///c:/users/zx/appdata/local/temp/tmpsorvob/extensions/fxdriver@googlecode.com/components/command-processor.js:12614)    at DelayedCommand.prototype.executeInternal_ (file:///c:/users/zx/appdata/local/temp/tmpsorvob/extensions/fxdriver@googlecode.com/components/command-processor.js:12619)    at DelayedCommand.prototype.execute/< (file:///c:/users/zx/appdata/local/temp/tmpsorvob/extensions/fxdriver@googlecode.com/components/command-processor.js:12561)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

能看到两次输出的WebElement是完全不同的,还用原来的元素去操作当然是不行的:

两次WebElement不同

所以在有可能有页面刷新的时候,不要用这种获取到元素,然后一直操作这个元素的写法;要在刷新之后重新获取一下元素进行操作。

0 0
原创粉丝点击