一 导航
使用WebDriver第一件想做的事情就是导航到指定链接。通常可以调用get方法去实现:
driver.get("http://www.google.com")
driver.get方法会导航到url指定的页面。webdriver会等待页面完全加载后,把控制权还给test脚本。需要注意的是,如果页面中使用了大量的AJAX负载过大,webdriver可能不知道什么时间加载完成。如果你想确保页面加载完全可以使用wait.
1.页面交互
只是导航到指定链接并不是很有用。我们想做的页面上的交互,准确的说是页面的元素操作。首先,我们要先找到它。webdriver提供了很多方法去找到元素,例如,元素定义如下:
<input type="text" name="passwd" id="passwd-id" />
你可以使用下面方法找到该元素:
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
还可以通过文本去找到链接,但要小心。该文本必须完全匹配。同样需要小心使用XPATH. 如果有多个元素匹配,只有第一个会返回。如果都没有找到,则会触发NoSuchElementException异常。
WebDriver有一个”Object-based"API;所有类型的元素使用相同的接口。这意味着,虽然使用IDE自动补全功能会看到大量可用的方法,但是并不是所有的都可用或有效。不必担心,Webdriver 会尽量去做正确的事情,如果调用了一个没有意义的方法,会触发异常。
获取了元素之后,就可以输入文本:
element.send_keys("some text")
还可以通过“Key"类模拟使用方向键:
element.send_keys(" and some", Keys.ARROW_DOWN)
send_keys可以将键盘快捷键应用到任何元素中,例如Gmail.但有一个副作用是输入的文本区的内容不能自动清除。相反,输入的内容会追加到输入区。可以clear方法容易的清除这些内容:
element.clear()
2.填写表单
前面已经说了如何在输入区输入文本,但其他元素呢?可以使用"toggle"下拉状态,使用“setSelected"进行选择框的设置。
element = driver.find_element_by_xpath("//select[@name='name']"
all_options = element.find_element_by_tag_name("option")
for option in all_options:
print("Value is: %s" % option.get_attribute("value"))
option.click()
它会找到第一个”SELECT"元素,并且循环打印每个选项的值,并且选中。 这不是处理SELECT元素最有效的方式。WebDriver支持一个“Select"类,这个类提供了处理这些的方法:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name('name')
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value(value)
WebDriver 同样提供取消所有选项的功能:
select = Select(driver.find_element_by_id('id'))
select.deselect_all()
这会取消页面上第一个SELECT中选项。
假设在一次测试中,我们需要所有默认选项的列表。Select类提供的方法可以返回一个列表。
select = Select(driver.find_element_by_xpath("xpath")
all_selected_options = select.all_selected_options
获取所有可用的选项:
options = select.options
当完成表格填写后,需要提交。一种方式就是找到"submit”键进行点击:
#Assume the button has the ID "submit":)
driver.find_element_by_id("submit").click()
另外,WebDriver有适用每个元素"submit"的简单方法。如果你在form中调用submit方法,webdriver会遍历DOM并调用submit,直到找到form的结束。如果元素不是一个form,就会触发NoSuchElementException异常:
element.submit()
3.拖放
可用使用drag和drop,或移动元素,或移动到另一个元素:
element = driver.find_element_by_name("source")
target = driver.find_element_by_name("target")
from selenium.webdriver import ActionChains
action_chains = ActionChains(driver)
action_chains.drag_and_drop(element, target).perform()
4.窗口和框架之间移动
现在的web应用很少只有一个窗口或没有框架的。WebDriver支持使用"switch_to_window"方法移动不同名称的窗口:
driver.switch_to_window("windowName")
现在应用到driver的调用,全部解析到指定名称的窗口。但是如何获取窗口的名称呢?看下打开的javascript或链接:
<a href="somewhere.html" target="windowName">Click here to open a window</a>
或则,可以通过窗口句柄去使用“switch_to_window"方法。了解了这个,就可以像这样打开每一个遍历的窗口:
for handle in driver.window_handles:
driver.switch_to_window(handle)
还可以进行frame到frame的摆动(或在frame中):
driver.switch_to_frame("frameName")
可以通过.路径访问子框架,或通过它的索引指定框架:
driver.switch_to_frame("frameName.0.child")
这样就会到达名字为frameName框架的第一个子框架的名为"child"的框架。如果使用from top,所有框架都会被evaluated.
当我们操作框架时,有时我们需要从子框架返回到它的父框架:
driver.switch_to_default_content()
5.弹出对话框
Selenium WebDriver内置了对弹出对话框的支持。当触发动作弹出一个对话框后,可以通过 alert访问:
alert = driver.switch_to_alert()
这会返回当前打开的alert对象。获取对象后,可以接受、忽略、读取内容或输入标志等操作。该接口同样适用于警报、确认、提示等对话框。可以参阅相关API了解更多内容。
6.导航:历史记录和位置
前面,我们通过"get"命令导航到指定网页(driver.get("http://www.example.com").WebDriver有一些小的,任务聚焦的接口,并且导航也是有用的task,导航到具体网页,可以通过:
driver.get("http://www.example.com")
前后移动浏览器记录:
driver.forward()
driver.back()
注意,这些功能依赖于底层驱动。当你调用这些方法的时候,不同的浏览器可能会有不同行为。
7.Cookies
当离开这些后续步骤后,可能感兴趣的是了解如何使用cookies.首先,我们要确定当前域名的cookie是有效的:
# Go to the correct domain
driver.get("http://www.example.com")
# Now set the cookie. This one's valid for the entire domain
cookie = {'name' : 'foo', 'value' : 'bar'}
driver.add_cookie(cookie)
# And now output all the avilable cookies for the current URL
driver.get_cookies()
Top^
上一篇Selenium主题2 下一篇Selenium主题4