selenium webdriver基于Python系列文章

作者: 七月尾巴_葵花 | 来源:发表于2017-05-24 22:21 被阅读107次

    现在很多前端框架的对话框是 div 形式的,也有一些弹出框iframe处理比较麻烦,如上一节所说的。使用百度登录页面演示一下,这个登录对话框是个div

    coding=utf-8 from

    selenium import webdriver driver = webdriver.Firefox()
    driver.get("http://www.baidu.com/")

    点击登录链接

    driver.find_element_by_name("tj_login").click()

    通过二次定位找到用户名输入框

    div=driver.find_element_by_class_name("tang-content").find_element_by_name("userName")

    div.send_keys("username")

    输入登录密码 driver.find_element_by_name("password").send_keys("password")

    点击登录

    driver.find_element_by_id("TANGRAM__PSP_10__submit").click()
    driver.quit()

    webdriver提供定位一组对象的方法:
    find_elements_by_id()
    find_elements_by_name()
    find_elements_by_class_name()
    find_elements_by_tag_name()
    find_elements_by_link_text() find_elements_by_partial_link_text()
    find_elements_by_xpath()
    find_elements_by_css_selector()

    定位一组对象,例一:
    ……

    选择页面上所有的tag name 为input的元素

    inputs = driver.find_elements_by_tag_name('input')

    然后从中过滤出tpye为checkbox的元素,单击勾选

    for input in inputs:
    if input.get_attribute('type') == 'checkbox':
    input.click()
    ……

    定位一组对象,例二:
    ……

    选择所有的type为checkbox的元素并单击勾选

    checkboxes = driver.find_elements_by_css_selector('input[type=checkbox]')
    for checkbox in checkboxes:
    checkbox.click()
    ……

    层级定位:
    ……

    点击Link1链接(弹出下拉列表) driver.find_element_by_link_text('Link1').click()

    在父亲元件下找到link为Action的子元素

    menu = driver.find_element_by_id('dropdown1').find_element_by_link_text('Another action')

    鼠标移动到子元素上

    ActionChains(driver).move_to_element(menu).perform()
    ……

    frame表单嵌套的定位:
    switch_to_frame 方法
    ……

    先找到到ifrome1(id = f1)

    driver.switch_to_frame("f1")

    再找到其下面的ifrome2(id =f2)

    driver.switch_to_frame("f2")

    下面就可以正常的操作元素了

    driver.find_element_by_id("kw1").send_keys("selenium")
    ……

    div弹窗的处理:
    ……

    点击登录链接

    driver.find_element_by_name("tj_login").click()

    通过二次定位找到用户名输入框

    div=driver.find_element_by_class_name("tang-content").find_element_by_name("userName") div.send_keys("username")
    ……

    多窗口的处理:
    current_window_handle   获得当前窗口句柄
    window_handles   返回的所有窗口的句柄到当前会话
    switch_to_window() 用于处理多窗口之前切换

    多窗口的处理:

    获得当前窗口

    nowhandle=driver.current_window_handle

    打开注册新窗口

    driver.find_element_by_name("tj_reg").click()

    获得所有窗口

    allhandles=driver.window_handles

    循环判断窗口是否为当前窗口

    for handle in allhandles:
    if handle != nowhandle:
    driver.switch_to_window(handle)
    print 'now register window!'
    #切换到邮箱注册标签
    driver.find_element_by_id("mailRegTab").click()
    driver.close()
    driver.switch_to_window(nowhandle)#回到原先的窗口

    相关文章

      网友评论

        本文标题:selenium webdriver基于Python系列文章

        本文链接:https://www.haomeiwen.com/subject/wqrnxxtx.html