selenium官方文档——3.导航

你想要用WebDriver做的第一件事就是导航到一个链接。通常的方法是调用get方法:

driver.get("http://www.google.com")

onload在将控件返回到测试或脚本之前,WebDriver将等待页面完全加载(即 事件已触发)。值得注意的是,如果您的页面在加载时使用了大量AJAX,那么WebDriver可能不知道它何时完全加载。如果您需要确保这些页面已完全加载,那么您可以使用 等待。

3.1。与页面交互

能够去地方并不是非常有用。我们真正想做的是与页面进行交互,或者更具体地说,是与页面中的HTML元素进行交互。首先,我们需要找到一个。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']")

您也可以通过文本查找链接,但要小心!文字必须完全匹配!在WebDriver中使用XPATH时也应该小心。如果有多个元素与查询匹配,则只返回第一个元素。如果找不到任何东西,NoSuchElementException将会提出。

WebDriver有一个“基于对象”的API; 我们使用相同的接口表示所有类型的元素。这意味着虽然您可能会看到许多可能的方法,当您点击IDE的自动完成组合键时可以调用它们,但并非所有方法都有意义或有效。别担心!WebDriver将尝试做正确的事情,如果你调用一个没有意义的方法(例如,“meta”标签上的“setSelected()”)将引发异常。

所以,你有一个元素。你能用它做什么?首先,您可能希望在文本字段中输入一些文本:

element.send_keys("some text")

您可以使用“Keys”类模拟按箭头键:

element.send_keys(" and some", Keys.ARROW_DOWN)

可以在任何元素上调用send_keys,这样就可以测试键盘快捷键,例如GMail上使用的键盘快捷键。这样做的副作用是在文本字段中键入内容不会自动清除它。相反,您键入的内容将附加到已存在的内容中。您可以使用clear方法轻松清除文本字段或textarea的内容:

element.clear()

3.2。填写表格

我们已经看过如何在textarea或text字段中输入文本,但其他元素呢?您可以“切换”下拉列表的状态,并且可以使用“setSelected”来设置选择的 OPTION标记。处理SELECT标签也不错:

element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
    print("Value is: %s" % option.get_attribute("value"))
    option.click()

这将在页面上找到第一个“SELECT”元素,并依次遍历每个OPTION,打印出它们的值,然后依次选择每个OPTION。

如您所见,这不是处理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中取消选择所有OPTION。

假设在测试中,我们需要所有默认选定选项的列表,Select类提供了一个返回列表的属性方法:

select = Select(driver.find_element_by_xpath("//select[@name='name']"))
all_selected_options = select.all_selected_options

要获得所有可用选项:

options = select.options

填写完表单后,您可能想要提交表单。一种方法是找到“提交”按钮并单击它:

 # Assume the button has the ID "submit" :)
 driver.find_element_by_id("submit").click()

或者,WebDriver在每个元素上都有“提交”的便捷方法。如果在表单中的元素上调用它,WebDriver将向上走DOM,直到找到封闭的表单,然后调用submit。如果元素不在表单中, NoSuchElementException则会引发:

element.submit()

3.3。拖放

您可以使用拖放,将元素移动一定量,或者移动到另一个元素:

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()

3.4。在窗口和框架之间移动

现代Web应用程序很少没有任何框架或被限制在单个窗口中。WebDriver支持使用“switch_to_window”方法在命名窗口之间移动:

driver.switch_to_window("windowName")

所有调用driver现在将被解释为定向到特定窗口。但你怎么知道窗口的名字?看一下打开它的javascript或链接:

<a href="somewhere.html" target="windowName">Click here to open a new window</a>

或者,您可以将“窗口句柄”传递给“switch_to_window()”方法。知道这一点,就可以迭代每个打开的窗口,如下所示:

for handle in driver.window_handles:
    driver.switch_to_window(handle)

你也可以逐帧摆动(或转入iframe):

driver.switch_to_frame("frameName")

可以通过用点分隔路径来访问子帧,也可以通过索引指定帧。那是:

driver.switch_to_frame("frameName.0.child")

将转到称为“frameName”的帧的第一个子帧的名为“child”的帧。 所有帧都被评估为来自* top *。

一旦我们完成框架的处理,我们将不得不回到父框架,可以使用以下方法完成:

driver.switch_to_default_content()

3.5。弹出对话框

Selenium WebDriver内置支持处理弹出对话框。在您触发将打开弹出窗口的操作后,您可以使用以下命令访问警报:

alert = driver.switch_to_alert()

这将返回当前打开的警报对象。使用此对象,您现在可以接受,关闭,读取其内容,甚至可以键入提示。此界面在警报,确认和提示方面同样有效。有关更多信息,请参阅API文档。

3.6。导航:历史和位置

之前,我们介绍了使用“get”命令导航到页面( driver.get(“http://www.example.com”))正如您所见,WebDriver有许多较小的,以任务为中心的界面,导航是一项有用的任务。要导航到页面,您可以使用get方法:

driver.get("http://www.example.com")

要在浏览器的历史记录中前后移动:

driver.forward()
driver.back()

请注意,此功能完全取决于底层驱动程序。如果您习惯于一个浏览器的行为而不是另一个浏览器,那么当您调用这些方法时,可能会发生意外情况。

3.7。Cookies

在我们离开这些后续步骤之前,您可能有兴趣了解如何使用cookie。首先,您需要在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 available cookies for the current URL 
driver.get_cookies()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值