selenium自动化实战-基于python语言(二: 编写脚本)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium自动化实战-基于python语言(二: 编写脚本)相关的知识,希望对你有一定的参考价值。

上一篇文章说到显示等待和隐式等待语句,我们继续学习下面的命令方法。

8.  定位一组元素

这里书上是自己写了一个页面代码,通过访问本地这个页面来举例。但我觉得找一个现有的页面自己琢磨更有意思,而且复杂的页面也会遇到复杂的问题。比如我根据163邮箱登录页面的 “十天内免登录” 复选框写了如下的代码:

from selenium import webdriver
import time

driver = webdriver.Firefox()
driver.get(‘http://mail.163.com/‘)
driver.implicitly_wait(20) #这里加一个隐式等待命令,等待页面加载,不然可能会报错
driver.switch_to_frame(‘x-URS-iframe‘) #163邮箱登录页面的复选框在一个框架内,所以需要定位到该框架内

#选择页面上所有的tag name 为input的元素
inputs = driver.find_elements_by_tag_name(‘input‘) #一定要注意定位一组元素需要是 elements, 而不是element


#通过for循环找出type为checkbox的元素并且单击勾选
for i in inputs:
    if i.get_attribute(‘type‘) == ‘checkbox‘:
        i.click()
        time.sleep(1)
        
print(len(inputs)) #这里结果打印出来是9,所以在这个框架内复选框的个数应该是9,但是比较直观的我们只能看到“十天内免登录”

#driver.quit()

上面这段代码会勾选 “十天内免登录” 复选框,其实如果单纯实现这个行为有更简单的方法,但是这里只是为了理解定位一组元素的方法。下面介绍 pop() 方法:

获取一组元素中最后一个 pop() 或者 pop(-1) 例如: driver.find_element_by_id(‘xx‘).pop().click()
获取一组元素中的第一个 pop(0)  
获取一组元素中的第二个 pop(1)  

 

 

 

 

9. 多表单切换

  • 嵌套的iframe有 id 或 name: switch_to_frame(‘‘) 里面填写 id 或者 name。 这里书里写的是: switch_to.frame(),这两个方法我都试过了,全都是正确的。但还是建议用规范的写法:switch_to.frame()
  • 嵌套的iframe 没有 id 或 name:

.......

xf = driver. find_element_by_xpath(‘//*[@class="if"]‘)

driver.switch_to_frame(xf)

driver.switch_to.parent_frame() # 默认跳出离它最近的switch_to.frame() 方法

driver.switch_to.default_content() # 跳回最外层的页面

10. 多窗口切换

获得当前窗口句柄 current_window_handle 例如: search_window = driver.current_window_handle
返回所有打开的窗口的句柄到当前会话 window_handles 例如: all_handles = driver.window_handles
切换到相应的窗口 switch_to.window() 例如: driver.switch_to.window(search_window)

 





















以上是关于selenium自动化实战-基于python语言(二: 编写脚本)的主要内容,如果未能解决你的问题,请参考以下文章

selenium自动化实战-基于python语言(三: 编写脚本)

selenium自动化实战-基于python语言(二: 编写脚本)

selenium2自动化测试实战--基于Python语言

Selenium2+Python自动化测试实战

基于python语言的Selenium自动化测试

Selenium+Python自动化测试实战元素定位