设为首页 收藏本站
查看: 748|回复: 0

[经验分享] Selenium Python bindings 文档二

[复制链接]

尚未签到

发表于 2015-4-22 12:14:46 | 显示全部楼层 |阅读模式
  3 跳转
  使用Webdriver要做的第一件事情是跳转到一个页面。一般的方式是通过调用get方法。
  driver.get("http://www.python.org")
  WebDriver在返回对测试或脚本的控制之前一直等到页面完全载入为止。但是如果页面使用了很多AJAX,WebDriver也许不知道什么时候页面会完全载入,就不值得这么做了。如果你需要确保这样的页面完全载入,可以使用waits方法。
  3.1 与页面交互
  只是能到达页面并不是十分有用,我们很想做的是与页面交互。或者,更精确地。与页面里的HTML元素。首先,我们需要找到一个元素。WebDriver提供了很多方法来需找元素。假设一个元素定义为:


  你可以使用以下方法去找到这个元素:
  Element = driver.find_element_by_id(“passwd_id”)
  Element = driver.find_element_by_name(“passwd”)
  Element = driver.find_element_by_xpath(“/input[@id=’passwd-id’]”)
  还可以通过文字找到一个链接,但是要小心!这个文字必须是完全匹配!在WebDriver里使用XPATH也要小心。 如果有多个元素满足查询,将只有第一个满足条件的被返回。如果没有发现任何元素,将会报NoSuchElementException。
  WebDriver 有一个基于对象的API。我们使用相同的接口来代表各种元素。这意味着在使用IDE的自动完成功能的时候,你或许看到很多可以调用的方法。但是不是所有的都行得通或者可行。但是无需担心!WebDriver将试图去做正确的事情,而且如果你调用了一个行不通的方法,会抛出一个异常。
  你得到了一个元素,你能做什么呢?首先,你也许想在输入框中输入一段文字。
  Element.send_keys(“some text”)
  你可以通过Keys类模仿按箭头键
  Element.send_keys(“and some”, Keys.ARROW_DOWN)
  在任意元素上都是可以调用send_keys的,这使得测试键盘快捷键比如用在Gmail上的,成为可能。一个副作用是在输入框中输入字符将不会自动清空。反而,你输入的将会被添加在已有文本之后。你可以很容易使用clear方法清空输入框或输入区域的内容。
  Element.clear()
  3.2 填充表单
  我们已经看到如何在输入框里输入字符,但是,其他元素呢?你可以选择选择框的状态,你可以使用setSelected来设置比如选项标签为选中状态。处理SELECT选项并不是太坏。
  Select = driver.find_element_by_xpath(“//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()
  这将会发现页面上第一个SELECT元素,然后循环通过每一根的OPTION,打印出他们的值,然后依次选中每个。
  当你完成填充表单之后,你也许想提交它。一个办法是找到submit按钮并点击它。
  # Assume the button has the ID “submit”
  Driver.find_element_by_id(‘submit’).click()
  或者,WebDriver在每个元素上都有很方便的submit方法。如果你在一个form的元素上调用这个方法,WebDriver将会查询DOM树,直至发现包含它的form然后调用submit。如果元素没有在form里面,将会抛出NoSuchElementExcellent
  Element.submit()
  
  3.3 托和拽
  Element = driver.find_element_by_name(“source”)
  Target = driver.find_element_by_name(“target”)
  From selenium.webdriver import ActionChains
  Action_chains = ActionChains(driver)
  Action_chains.drag_and_drop(element, target)
  
  3.4 在窗口和帧之间移动
  在现在的web应用中很少窗口里没有任何帧。WebDriver支持使用switch_to_window方法在命名窗口里移动。
  Driver.switch_to_window(“windowName”)
  所有对driver的调用现在都被解释为直接到特定的窗口。但是如何知道窗口的名字?看一下打开窗口的javascript或者链接。
  Click here to open a new window
  作为选择,你可以传一个窗口句柄给switch_to_window()方法。知道这个,就可以再每个打开的窗口之间迭代访问
  For handle in driver.window_handlers:
  Driver.switch_to_window(handle)
  也可以在帧之间切换
  Driver.switch_to_frame(“frameName”)
  也可以通过用点分解路径访问子帧,可以通过指定index来确定帧。
  Driver.switch_to_frame(frameName.0.child)
  
  3.5 弹出窗口
  Selenium WebDriver有对处理弹出窗口的内置支持。在你激发一个动作可以打开一个弹出窗口,你可以通过以下方式访问alert。
  Alert = driver.switch_to_alert()
  这将返回当前打开的警告对象。通过这个对象,你可以接受,取消,读取它的内容或甚至在提示里输入内容。这个借口在警告,确认,提示里工作的一样好。
  
  3.6 导航:历史和定位
  早先,我们使用get方法来涵盖跳转。如你所见,WebDriver有很多更小的,任务集中的接口,导航是一个很有用的任务。为了跳转到一个页面,你可以使用get方法:driver.get(“http://www.example.com”)
  为了在浏览器历史里向前或向后移动:
  Driver.forward()
  Driver.back()
  请注意这个功能完全依赖于潜在的驱动。
  
  3.7 Cookies
  Driver.get(“http://www.example.com”)
  # Now set the cookie. This one is valid for the entire domain
  Cookie = {“key”: “value”}
  Driver.add_cookie(cookie)
  
  # And now output all the available cookies for the current URL
  All_cookies = driver.get_cookies()
  For cookie_name, cookie_value in all_cookies.items():
  Print “%s -> %s”, cookie_name, cookie_value
  
  4 定位元素
  有很多种在页面上定位元素的策略。你可以使用对你case最合适的那种。Selenium提供下列方法来定位页面上的元素
  Find_element_by_id
  Find_element_by_name
  Find_element_by_xpath
  Find_element_by_link_text
  Find_element_by_partial_link_text
  Find_element_by_tag_name
  Find_element_by_class_name
  Find_element_by_css_selector
  
  发现多个元素(这些方法将返回一个列表)
  Find_elements_by_name
  Find_elements_by_xpath
  Find_elements_by_link_text
  Find_elements_by_partial_link_text
  Find_elements_by_tag_name
  Find_elements_by_class_name
  Find_elements_by_css_selector
  4.1 通过ID定位元素
  当你知道元素的id属性的时候使用这个方法。通过这个策略,匹配定位的第一个具有id属性的元素将被返回,如果没有元素具有id属性,抛出NoSuchElementException。
  例如,考虑下页面源文件
  
  
  
  
  
  
  
  
  
  Form元素可以被如此定位:login_form = driver.find_element_by_id(“loginForm”)
  
  4.2 通过名字定位
  当你知道元素的name属性的时候使用这个方法。通过这个策略,匹配定位的第一个具有name属性的元素将被返回,如果没有元素具有name属性,抛出NoSuchElementException。
  例如,考虑下页面源文件
  
  
  
  
  
  
  
  
  
  
  用户名和密码元素可以如下定位:
  Username = driver.find_element_by_name(“username”)
  Password = driver.find_element_by_name(“password”)
  Continue = driver.find_element_by_name(“Continue”)
  
  4.3 通过xpath定位
  Xpath是用来在XML文档中定位节点的语言。
  例如,考虑下页面源文件
  
  
  
  
  
  
  
  
  
  
  Form元素可以如下定位:
  Login_form = driver.find_element_by_xpath(“/html/body/form[1]”)
  Login_form = driver.find_element_by_xpath(“//form[1]”)
  Login_form = driver.find_element_by_xpath(“//form[@id=’loginForm’]”)
  Username可以如下定位:
  username = driver.find_element_by_xpath("//form[input/@name='username']")
  username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
  username = driver.find_element_by_xpath("//input[@name='username']")
  
  4.4 通过链接文本定义超链接
  
  
  Are you sure you want to do this?
  Continue
  Cancel
  
  
  Continue链接可以如下定位:
  continue_link = driver.find_element_by_link_text('Continue')
  continue_link = driver.find_element_by_partial_link_text('Conti')
  
  英文原文见这里

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59613-1-1.html 上篇帖子: Python多线程编程 下篇帖子: 转:PAMIE- Python实现IE自动化的模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表