zoukankan      html  css  js  c++  java
  • 016-WebDriver API(2)


    1. 多表单切换

    WebDriver只能在一个页面上对元素进行识别和定位,无法直接定位frame/iframe表单内嵌页面上的元素,这是就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面
    通过switch_to.frame()切换表单
    通过switch_to.default_content()回到最外层的页面

    from time import sleep
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.126.com")
    driver.maximize_window()
    sleep(2)
    
    driver.find_element_by_link_text("密码登录").click()
    login_frame = driver.find_element_by_css_selector("iframe[id^=x-URS-iframe]")
    
    driver.switch_to.frame(login_frame)
    driver.find_element_by_name("email").send_keys("user@126.com")
    driver.find_element_by_name("password").send_keys("123456")
    driver.find_element_by_id("dologin").click()
    driver.switch_to.default_content()

    2 多窗口切换

    current_window_handle:获得当前窗口
    子主题 1
    window_handles:返回所有窗口的句柄到当前会话
    switch_to.window():切换到相应的窗口

    from selenium import webdriver

    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    driver.maximize_window()

    # 获得当前窗口句柄
    search_window = driver.current_window_handle

    driver.find_element_by_link_text("登录").click()
    driver.implicitly_wait(5)
    driver.find_element_by_link_text("立即注册").click()

    # 获得当前所有窗口句柄
    all_handles = driver.window_handles

    # 进入注册窗口进行操作
    for handle in all_handles:
    if handle != search_window:
    driver.switch_to.window(handle)
    print(driver.title)
    driver.find_element_by_name("userName").send_keys("usename")
    driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__phone']").send_keys("134XXXXXXXX")
    driver.close()
    driver.switch_to.window(search_window)
    print(driver.title)
    driver.quit()

     3 警告框处理

    在WebDriver中处理Javascript生成的alert、confirm、prompt,使用switch_to.alert方法定位,然后使用text、accept、dismiss、send_keys等进行操作
    text:返回alert、confirm、prompt中的文字信息
    accept():接收现有警告框
    dismiss():解散所有警告框
    send_keys():在警告框中输入文本(如果可以输入文本的话)

    from time import sleep
    from selenium import webdriver

    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    driver.maximize_window()

    driver.find_element_by_link_text("设置").click()
    driver.find_element_by_link_text("搜索设置").click()
    sleep(2)
    driver.find_element_by_class_name("prefpanelgo").click()

    # 获取警告框
    alert = driver.switch_to.alert
    text = alert.text
    print(text)
    # 接受警告框
    alert.accept()
    driver.quit()

    4 下拉框处理

    WebDriver提供了Select类来处理下拉框
    导入Select类:
    from selenium.webdriver.support.select import Select
    Select类:用于定位<select>标签
    select_by_value():通过value值定位下拉框选项
    select_by_visible_text():通过text值定位下拉选项
    select_by_index():根据下拉框的索引进行选择。第一个选项为0,第二个选项为1

    from time import sleep
    from selenium import webdriver
    from selenium.webdriver.support.select import Select
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    
    link = driver.find_element_by_link_text("设置").click()
    driver.find_element_by_link_text("搜索设置").click()
    sleep(2)
    
    sel = driver.find_element_by_xpath("//select[@id='nr']")
    sleep(2)
    Select(sel).select_by_value("50")
    sleep(2)
    Select(sel).select_by_index("1")
    sleep(2)
    Select(sel).select_by_visible_text("每页显示10条")

    5 窗口截图

    WebDriver提供了截图函数save_screenshot(),可以用来截取当前窗口

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    
    # 截取当前窗口 driver.save_screenshot(
    "./baidu.png") driver.quit()
  • 相关阅读:
    第12组 Beta冲刺(2/5)
    第12组 Beta冲刺(1/5)
    第12组 Alpha事后诸葛亮
    第12组 Alpha冲刺(6/6)
    第12组 Alpha冲刺(5/6)
    第12组 Alpha冲刺(4/6)
    第12组 Alpha冲刺(3/6)
    第12组 Alpha冲刺(2/6)
    Why I start blogging.
    第二十章 更新和删除数据
  • 原文地址:https://www.cnblogs.com/kkkhycz/p/11695110.html
Copyright © 2011-2022 走看看