driver.get_cookies() 获得cookie信息add_cookie(cookie_dict) 向cookie添加会话信息delete_cookie(name) 删除特定(部分)的cookiedelete_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 定位有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过linkbrowser.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) 删除特定(部分)的cookiedelete_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()‘‘‘
时间: 2024-10-20 10:35:24