原文地址:https://www.xugj520.cn/archives/90.html
一、获取文本值
---------------------------------------------------------------------------------
人们通常希望检索元素中包含的innerText值。这将返回单个字符串值。请注意,这只会返回页面上显示的可见文本。
element = driver.find_element_by_id("element_id")
element.text
二、用户输入 - 填写表单
---------------------------------------------------------------------------------
我们已经看过如何在textarea或text字段中输入文本,但其他元素呢?您可以“切换”复选框的状态,也可以使用“单击”设置选择的OPTION标记。处理SELECT标签也不错:
select = driver.find_element_by_tag_name("select")
allOptions = select.find_elements_by_tag_name("option")
for option in allOptions:
print "Value is: " + option.get_attribute("value")
option.click()
这将在页面上找到第一个“SELECT”元素,并依次遍历每个OPTION,打印出它们的值,然后依次选择每个OPTION。正如您将注意到的,这不是处理SELECT元素的最有效方法。WebDriver的支持类包括一个名为“Select”的支持类,它提供了与这些类交互的有用方法。
# available since 2.12
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_tag_name("select"))
select.deselect_all()
select.select_by_visible_text("Edam")
这将从页面上的第一个SELECT中取消选择所有OPTION,然后选择带有显示文本“Edam”的OPTION。
填写完表单后,您可能想要提交表单。一种方法是找到“提交”按钮并单击它:
driver.find_element_by_id("submit").click()
或者,WebDriver在每个元素上都有“提交”的便捷方法。如果在表单中的元素上调用它,WebDriver将向上走DOM,直到找到封闭的表单,然后调用submit。如果元素不在表单中,那么NoSuchElementException将抛出:
element.submit()
三、多窗口、多标签
---------------------------------------------------------------------------------
某些Web应用程序具有许多标签或多个窗口。WebDriver支持使用“switchTo”方法在多个窗口之间移动:
driver.switch_to.window("windowName")
所有调用driver现在将被解释为定向到特定窗口。但你怎么知道窗口的名字?看一下打开它的javascript或链接:
<a href="somewhere.html" target="windowName">Click here to open a new window</a>
或者,您可以将“窗口句柄”传递给“switchTo()。window()”方法。知道这一点,就可以迭代每个打开的窗口,如下所示:
for handle in driver.window_handles:
driver.switch_to.window(handle)
您还可以从一个标签切换到另一标签(或切换到iframe):
driver.switch_to.frame("frameName")
三、弹出对话框
---------------------------------------------------------------------------------
从Selenium 2.0 beta 1开始,内置支持处理弹出对话框。触发打开弹出窗口的操作后,您可以使用以下命令访问对话框:
alert = driver.switch_to.alert
# usage: alert.dismiss(), etc.
这将返回当前打开的对话框对象。使用此对象,您现在可以接受,关闭,读取其内容,甚至可以键入提示。此界面在警告,确认和提示方面同样有效。有关更多信息,请参阅JavaDocs 或RubyDocs。
四、导航:历史和位置
---------------------------------------------------------------------------------
之前,我们介绍了使用“get”命令(driver.get(“http://www.example.com”)或driver.Url="http://www.example.com"在C#中)导航到页面 。正如您所见,WebDriver具有许多较小的,以任务为中心的界面,导航是一项有用的任务。因为加载页面是一个基本要求,所以这样做的方法存在于主WebDriver接口上,但它只是一个同义词:
driver.get("http://www.example.com") # python doesn't have driver.navigate
“导航”界面还提供了在浏览器历史记录中前后移动的功能:
driver.forward()
driver.back()
请注意,此功能完全取决于底层浏览器。如果您习惯于一个浏览器的行为而不是另一个浏览器,那么当您调用这些方法时,可能会发生意外情况。
###四、Cookie
---------------------------------------------------------------------------------
cookie的使用
# Go to the correct domain
driver.get("http://www.example.com")
# Now set the cookie. Here's one for the entire domain
# the cookie name here is 'key' and its value is 'value'
driver.add_cookie({'name':'key', 'value':'value', 'path':'/'})
# additional keys that can be passed in are:
# 'domain' -> String,
# 'secure' -> Boolean,
# 'expiry' -> Milliseconds since the Epoch it should expire.
# And now output all the available cookies for the current URL
for cookie in driver.get_cookies():
print "%s -> %s" % (cookie['name'], cookie['value'])
# You can delete cookies in 2 ways
# By name
driver.delete_cookie("CookieName")
# Or all of them
driver.delete_all_cookies()
五、更改用户代理
---------------------------------------------------------------------------------
使用Firefox驱动程序很容易:
profile = webdriver.FirefoxProfile()
profile.set_preference("general.useragent.override", "some UA string")
driver = webdriver.Firefox(profile)