zoukankan      html  css  js  c++  java
  • selenlum笔记,(定位方式,搜索,cookie)

    driver.get_cookies() 获得cookie信息
    add_cookie(cookie_dict)  向cookie添加会话信息
    delete_cookie(name)   删除特定(部分)的cookie
    delete_all_cookies()    删除所有cookie


    driver.quit()
    退出关闭所有程序及窗口
    driver.close()
    关闭当前窗口

    driver.get(url)
    print(driver.title)
    打印页面title


    driver.maximize_window()
    将浏览器最大化
    driver.set_window_size(480,800)
    设置浏览器宽高
    这个需求也还是有的,比如我们通过PC浏览器在访问一下手机网站时,调整浏览器为手机屏幕的宽、高,容易发现一些显示问题。(上面的手机邮箱网站就是笔者测试过的一个产品)

    driver.back()
    后退一个页面
    driver.forword()
    前进一个页面

    八种定位方式:
    · id
    · name
    · class name
    · link text
    · partial link text
    · tag name
    · xpath
    · css selector

    #通过id方式定位
    browser.find_element_by_id("kw").send_keys("selenium")

    #通过name方式定位
    browser.find_element_by_name("wd").send_keys("selenium")

    #通过tag name方式定位
    browser.find_element_by_tag_name("input").send_keys("selenium")

    #通过class name 方式定位
    browser.find_element_by_class_name("s_ipt").send_keys("selenium")

    #通过CSS方式定位
    browser.find_element_by_css_selector("#kw").send_keys("selenium")

    #通过xphan方式定位
    browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")

    link 定位
    有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link
    browser.find_element_by_link_text("贴 吧").click()

    Partial Link Text 定位
    通过部分链接定位,这个有时候也会用到,我还没有想到很好的用处。拿上面的例子,我可以只用链接的一部分文字进行匹配:
    browser.find_element_by_partial_link_text("贴").click()

    选定一组元素:
    方法一:
    inputs = dr.find_elements_by_tag_name('input')
    for input in inputs:
        if input.get_attribute('type') == 'checkbox':
            input.click()
    time.sleep(2)
    方法二:
    checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
    for checkbox in checkboxes:
        checkbox.click()

    去掉最后一个按钮的选定状态:

    # 选择所有的checkbox并全部勾上
    checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')
    for checkbox in checkboxes:
        checkbox.click()
    time.sleep(2)

    # 把页面上最后1个checkbox的勾给去掉
    dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()
    time.sleep(2)


    driver.find_element_by_link_text('link').click()
    WebDriverWait(driver,10).until(lambda the_driver:
    the_driver.find_element_by_id(dropdown).is_displayd())
    menu = the_driver.find_element_by_id('dropdown').find_element_by_link_text('Action')
    webdriver.ActionChains(dr).move_to_element(menu).performm()



    WebDriverWait(dr, 10)

    10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。dr就不解释了,前面操作webdriver.firefox()的句柄

     

    is_displayed()

    该元素是否用户可以见

    class ActionChains(driver)

    driver: 执行用户操作实例webdriver

    生成用户的行为。所有的行动都存储在actionchains对象。通过perform()存储的行为。

    move_to_element(menu)

    移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素

    to_element:元件移动到

    perform()

    执行所有存储的行为



    · click 点击对象
    · send_keys 在对象上模拟按键输入
    · clear 清除对象的内容,如果可以的话


    · text  获取该元素的文本
    data=driver.find_element_by_id("cp").text
    · submit  提交表单
    #通过submit() 来操作
    driver.find_element_by_id("su").submit()  
    · get_attribute  获得属性值



    s_selected(self)

    #元素是否被选择

    is_enabled()

    #元素是否被启用
    clear()

    #清除一个文本输入元素的文本


    implicitly_wait():隐式等待
      当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
      换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0
      一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,
      它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。

    它的用法应该比time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

    文档解释:

    selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait)

    隐式地等待一个无素被发现或一个命令完成;这个方法每次会话只需要调用一次
     

    driver.switch_to_window()

    有可能嵌套的不是框架,而是窗口,还有真对窗口的方法:switch_to_window

    用法与switch_to_frame 相同:

    driver.switch_to_window("windowName")


    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa等下添加滚动条到底的方法
    调用js方法

    execute_script(script, *args)
    在当前窗口/框架 同步执行javaScript

    使用:
    driver.execute_script(‘document.title’)




    #定位上传按钮,添加本地文件
    driver.find_element_by_name("file").send_keys('D:\\selenium_use_case\upload_file.txt')
    time.sleep(2)
    上传过程一般要打开一个本地窗口,从窗口选择本地文件添加。所以,一般会卡在如何操作本地窗口添加上传文件。
    其实,在selenium  webdriver 没我们想的那么复杂;只要定位上传按钮,通send_keys添加本地文件路径就可以了。绝对路径和相对路径都可以,关键是上传的文件存在。


    driver.switch_to_alert().accept()
    确定弹出框的内容



    先来解决场第一个问题,法律条款是一个内嵌窗口,通过firebug工具可以定位到内嵌入窗口可以定位到元素的id ,可以通过下面的代码实现。
    js="var q=document.getElementById('id').scrollTop=10000"
    driver.execute_script(js)


    正常页面滚动条到底
    js="var q=document.documentElement.scrollTop=10000"
    driver.execute_script(js)

    滚动条到顶
    js="var q=document.documentElement.scrollTop=0"
    driver.execute_script(js)


    按钮操作
    driver = webdriver.Firefox()
    driver.get("http://passport.kuaibo.com/login/?referrer=http%3A%2F%2Fwebcloud.kuaibo.com%2F")

    time.sleep(3)
    driver.maximize_window() # 浏览器全屏显示

    driver.find_element_by_id("user_name").clear()
    driver.find_element_by_id("user_name").send_keys("fnngj")

    #tab的定位相相于清除了密码框的默认提示信息,等同上面的clear()
    driver.find_element_by_id("user_name").send_keys(Keys.TAB)
    time.sleep(3)
    driver.find_element_by_id("user_pwd").send_keys("123456")

    #通过定位密码框,enter(回车)来代替登陆按钮
    driver.find_element_by_id("user_pwd").send_keys(Keys.ENTER)

    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
    time.sleep(3)

    #ctrl+x 剪切输入框内容
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
    time.sleep(3)

    #输入框重新输入内容,搜索
    driver.find_element_by_id("kw").send_keys(u"虫师 cnblogs")
    driver.find_element_by_id("su").click()

    所有按键的代号
    module:selenium.webdriver.common.keys
    • class Keys()
    – NULL = u’ue000’
    – CANCEL = u’ue001’ # ^break
    – HELP = u’ue002’
    – BACK_SPACE = u’ue003’
    – TAB = u’ue004’
    – CLEAR = u’ue005’
    – RETURN = u’ue006’
    – ENTER = u’ue007’
    – SHIFT = u’ue008’
    – LEFT_SHIFT = u’ue008’ # alias
    – CONTROL = u’ue009’
    – LEFT_CONTROL = u’ue009’ # alias
    – ALT = u’ue00a’
    – LEFT_ALT = u’ue00a’ # alias
    – PAUSE = u’ue00b’
    – ESCAPE = u’ue00c’
    – SPACE = u’ue00d’
    – PAGE_UP = u’ue00e’
    – PAGE_DOWN = u’ue00f’
    – END = u’ue010’
    – HOME = u’ue011’
    – LEFT = u’ue012’
    – ARROW_LEFT = u’ue012’ # alias
    – UP = u’ue013’
    – ARROW_UP = u’ue013’ # alias
    – RIGHT = u’ue014’
    – ARROW_RIGHT = u’ue014’ # alias
    – DOWN = u’ue015’
    – ARROW_DOWN = u’ue015’ # alias
    – INSERT = u’ue016’
    – DELETE = u’ue017’
    – SEMICOLON = u’ue018’
    – EQUALS = u’ue019’
    – NUMPAD0 = u’ue01a’ # numbe pad keys
    – NUMPAD1 = u’ue01b’
    – NUMPAD2 = u’ue01c’
    – NUMPAD3 = u’ue01d’
    – NUMPAD4 = u’ue01e’
    – NUMPAD5 = u’ue01f’
    – NUMPAD6 = u’ue020’
    – NUMPAD7 = u’ue021’
    – NUMPAD8 = u’ue022’
    – NUMPAD9 = u’ue023’
    – MULTIPLY = u’ue024’
    – ADD = u’ue025’
    – SEPARATOR = u’ue026’
    – SUBTRACT = u’ue027’
    – DECIMAL = u’ue028’
    – DIVIDE = u’ue029’
    – F1 = u’ue031’ # function keys
    – F2 = u’ue032’
    – F3 = u’ue033’
    – F4 = u’ue034’
    – F5 = u’ue035’
    – F6 = u’ue036’
    – F7 = u’ue037’
    – F8 = u’ue038’
    – F9 = u’ue039’
    – F10 = u’ue03a’
    – F11 = u’ue03b’
    – F12 = u’ue03c’
    – META = u’ue03d’
    – COMMAND = u’ue03d’


    driver.get_cookies() 获得cookie信息
    add_cookie(cookie_dict)  向cookie添加会话信息
    delete_cookie(name)   删除特定(部分)的cookie
    delete_all_cookies()    删除所有cookie



    #定位到要右击的元素
    qqq =driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]")
    #对定位到的元素执行鼠标右键操作
    ActionChains(driver).context_click(qqq).perform()



    context_click()  右击
    '''
    #你也可以使用三行的写法,但我觉得上面两行写法更容易理解
    chain = ActionChains(driver)
    implement = driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]")

    #定位到要双击的元素
    qqq =driver.find_element_by_xpath("xxx")
    #对定位到的元素执行鼠标双击操作
    ActionChains(driver).double_click(qqq).perform()

    #定位元素的原位置
    element = driver.find_element_by_name("source")
    #定位元素要移动到的目标位置
    target =  driver.find_element_by_name("target")

    #执行元素的移动操作
    ActionChains(driver).drag_and_drop(element, target).perform()
    chain.context_click(implement).perform()
    '''




  • 相关阅读:
    LeetCode59 Spiral Matrix II
    LeetCode58 Length of Last Word
    LeetCode54 Spiral Matrix
    LeetCode63 Unique Paths II
    LeetCode62 Unique Paths
    LeetCode55 Jump Game
    网易2017年校招笔试题 最大的奇约数
    Codeforces Round #119 (Div. 2)
    Codeforces Round #118 (Div. 2)
    2016 MIPT Pre-Finals Workshop Taiwan NTU Contest
  • 原文地址:https://www.cnblogs.com/lianghongrui/p/6885897.html
Copyright © 2011-2022 走看看