关于selenium,就不多介绍什么了,主要就是用来进行自动化的工具。怎样进行自动化,这才是它大放异彩的地方。下面就来看看吧!
selenium定位
关于定位,一共有八种方法:
- find_element_by_id()
- find_element_by_name()
- find_element_by_class_name()
- find_element_by_tag_name()
- find_element_by_link_text()
- find_element_by_partial_link_text()
- find_element_by_xpath()
- find_element_by_css_selector()
用的比较多的是id,xpath
xpath的话不一定需要xpath基础,主要是chrome浏览器可以在控制卡右键获取,是不是很方便??
还有一些其他的:
下面是我们要定位的元素(从百度[www.baidu.com]拿过来的):
<input id="kw" class="s_ipt" name="wd"
value="" maxlength="255" autocomplete="off"
- 通过id定位:
dr.find_element_by_id("kw")
- 通过name定位:
dr.find_element_by_name("wd")
- 通过class name定位:
dr.find_element_by_class_name("s_ipt")
- 通过tag name定位:
dr.find_element_by_tag_name("input")
- 通过css定位:
dr.find_element_by_css_selector("#kw")
Selenium控制浏览器
首先,最基础的,打开百度:
代码语言:javascript复制from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
这个应该没多大问题。
关于浏览器的一些设置这才是重点:
现在我需要:
设置浏览器宽400、高900显示
代码语言:javascript复制driver.set_window_size(400, 900)
控制浏览器前进、后退:
我们打开了第二个网页新闻
代码语言:javascript复制driver.get('http://news.baidu.com')
后退到一开始的百度:
代码语言:javascript复制driver.back()
再前进到新闻
代码语言:javascript复制driver.forward()
Selenium-Webdriver常用方法
用户对于网页的常用操作无非以下几种:
点击:
代码语言:javascript复制driver.find_element_by_id("kw").click()
在找到元素后触发点击事件
输入:
代码语言:javascript复制driver.find_element_by_id("kw").send_keys("python大法好")
找到输入框后,触发输入方法
(这里有一点要说一下,为了证明你是一个合格的或者是比较细心的tester,这时候你就需要在输入之前做一件事,这件事就是清空数据,防止输入框里面有缓存数据,我们就需要清空:
代码语言:javascript复制driver.find_element_by_id("kw").clear()
)
还有就是表单提交:
代码语言:javascript复制driver.find_element_by_id("kw").send_keys("python大法好").submit()
submit方法
还有一些不常用的方法:
获取元素的大小尺寸:
代码语言:javascript复制driver.find_element_by_id("kw").size
获取元素的文本:
代码语言:javascript复制driver.find_element_by_id("kw").text
获取属性值:
代码语言:javascript复制driver.find_element_by_id("kw").get_attribute('type')
查看元素是否可见:
代码语言:javascript复制driver.find_element_by_id("kw").is_displayed()
Selenium鼠标
关于鼠标,我们之前有个click事件其实就说鼠标的功能,现在我们看看还有哪些常用操作。
在selenium里,这些操作都封装在ActionChains 类中。
可以通过下面这种方法直接导入ActionChains这个类:
代码语言:javascript复制from selenium.webdriver import ActionChains
- perform(): 执行所有 ActionChains 中存储的行为;
- context_click(): 右击;
driver.find_element_by_id("kw").context_click()
- double_click(): 双击;
driver.find_element_by_id("kw").double_click()
- drag_and_drop(): 拖动;
- move_to_element(): 鼠标悬停。
鼠标悬停的时候分为两步,先定位到悬停的元素,再对定位到的元素执行鼠标悬停操作。
代码语言:javascript复制above = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(above).perform()
Selenium键盘事件
Keys()类提供了键盘上几乎所有按键的方法。
我们之前说过send_keys()方法可以用来模拟键盘输入。
删除一个字符
如果说之前输入了1233
代码语言:javascript复制driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
执行了这一句之后输入就变成123
输入空格
代码语言:javascript复制driver.find_element_by_id("kw").send_keys(Keys.SPACE)
全选输入框的内容 Ctrl a
代码语言:javascript复制driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
剪贴 Ctrl x
代码语言:javascript复制driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
粘贴 Ctrl v
代码语言:javascript复制driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')
复制 Ctrl c
代码语言:javascript复制driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'c')
回车键
代码语言:javascript复制driver.find_element_by_id("su").send_keys(Keys.ENTER)
Selenium断言
做测试最重要的就是断言,我们通常可以通过获取title 、URL和text等信息进行断言。
在python里面有个assert的关键字,这是我们做断言的关键,在selenium里面我们可以将测试的结果和预期的结果做比较,这样就是一种断言。
代码语言:javascript复制driver.title
driver.find_element_by_class_name('nums').text
Selenium等待
等待分为两种,一种是显式等待,一种是隐式等待。
显式等待是WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常。
代码语言:javascript复制WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。
until(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为False。
代码语言:javascript复制driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(
EC.presence_of_element_located((By.ID, "kw")))
element.send_keys('python乱炖')
隐式等待
WebDriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0。它的用法相对来说要简单得多。
代码语言:javascript复制driver.implicitly_wait(1)
这就是一个简单的隐式等待。
默认参数的单位为秒,本例中设置等待时长为1秒。首先这1秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。若直到超出设置时长(1秒)还没有定位到元素,则抛出异常。
下期继续。