• python_selenium_等待与切换


    一。等待

    1.强制等待

    使用方法:time.sleep()

    特点:非智能等待,等待时间不好控制,多用在不同系统之间的等待时间的设置

    2.隐性等待

    智能等待(设置一个时间,在超时之前能够找到直接返回元素,如果超时就报错:NoSuchElementException)

    特点:1.全局设置;

       2.设置超时时间,超过时间报错:NoSuchElementException

               3.只能等待元素

    使用:

    from selenium import webdriver
    import time
    driver=webdriver.Chrome()
    #设置隐性等待时间为5秒
    driver.implicitly_wait(5)

    3.显性等待

    特点:1.可以等待某个可以被点击

       2.可以等待某个元素可见

       3.等待某个窗口被打开

       4.显性等待不是全局的,每次等待都要单独设置

    使用(比较常用):

    - presence_of_element_located(locator) 元素是否出现
    - visibility_of_element_located(locator) 元素是否可见
    - element_to_be_clickable(locator) 元素是否可以被点击

    例子:

    #显性等待
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions

    #第一设置定时器,没0.5秒获取一次,一直持续三秒中
    wait=WebDriverWait(driver,3,poll_frequency=0.5)
    #第二:设置满足的条件
    #设置locator条件,以xpath方式,后面式表达式
    locator=('xpath','//*[text()="ke.qq.com/"]')
    #等待该元素为可点击状态
    element_tengxun=wait.until(expected_conditions.element_to_be_clickable(locator=locator))
    driver.get("http://www.baidu.com")

    二。切换
    1.窗口切换
    #窗口切换
    #driver.window_handles - -获取所有句柄;driver.switch_to.window选择窗口
    driver.switch_to.window(driver.window_handles[-1])
    #获取当前窗口的url信息
    print(driver.current_url)

    运行结果:

    2.iframe切换

    1)先定位iframe所在的位置

    2)使用switch_to.frame(位置)方法进入到定位iframe页面

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions

    driver=webdriver.Chrome()
    #iframe 切换
    driver.get("http://localhost:63342/python29/class_34_%E4%B8%89%E5%A4%A7%E7%AD%89%E5%BE%85%E5%92%8C%E5%88%87%E6%8D%A2/%E5%88%87%E6%8D%A2.html?_ijt=f7cfcmfgigvmnrorpmrdtagiub")
    #页面iframe的坐标地址
    element_ifrnamebaidu=driver.find_element_by_xpath('//iframe[@src]')
    #进入到iframe标签当中的 链接中
    driver.switch_to.frame(element_ifrnamebaidu)
    #定位到iframe链接中百度的输入框
    element_baiduinput=driver.find_element_by_xpath('//input[@id="kw"]')
    print(element_baiduinput)
    #切回主页面
    driver.switch_to.default_content()
    #定位主页面的信息“hello”
    t=driver.find_element_by_xpath('//p[text()="hello"]')
    print(t)
    运行结果:

    html 源文件内容:

    注意:

    1)多个iframe(iframe中还有iframe,多层嵌套)

    需要一个一个iframe定位并切入,退出也是。

    3.Alert切换

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions

    driver.get("http://localhost:63342/python29/class_34_%E4%B8%89%E5%A4%A7%E7%AD%89%E5%BE%85%E5%92%8C%E5%88%87%E6%8D%A2/alert%E5%BC%B9%E7%AA%97.html?_ijt=t76899q7dku673gtinaepdv06b")
    #定位按‘hello’并点击
    click_butent=driver.find_element_by_xpath('//p[@id]')
    click_butent.click()
    #等待alert出现
    #expected_conditions.alert_is_present()
    WebDriverWait(driver,20,poll_frequency=0.5).until(expected_conditions.alert_is_present())
    #切换到alert页面
    alert_ele=driver.switch_to.alert
    time.sleep(2)
    #点击确定
    alert_ele.accept()
    #点击取消
    #alert_ele.dismiss()
    运行结果:

    html源文件内容:

  • 相关阅读:
    老调重弹之整除与实数除
    #define 预处理指令(C++,C#,VB.NET)
    char类型和string类型(C++,C#)
    使用XPATH对XML数据进行解析
    SQL Server查询优化之:使用提示(Hints)
    XSLT几种应用场景
    在C++中定义常量的两种方法的比较
    为SSIS编写自定义任务项(Task)之高级篇
    利用反射绑定事件处理程序(C#)
    自定义打开Reflector的方式
  • 原文地址:https://www.cnblogs.com/newsss/p/13310756.html
Copyright © 2020-2023  润新知