优秀的编程知识分享平台

网站首页 > 技术文章 正文

python selenium中文文档-导航(python selenium webdriver)

nanyue 2024-09-01 00:01:54 技术文章 5 ℃

3. 导航

要用WebDriver做的第一件事就是导航到一个链接网址。 执行此操作的常规方法是调用get方法:

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

WebDriver将等待页面完全加载(即onload事件已触发)后,控制权返回脚本。 值得注意的是,如果你加载的页面使用了大量AJAX,那么WebDriver可能不知道它何时加载完全。 如果你需要确保这些页面已完全加载,那么你可以使用waits方法。

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; 我们使用element接口表示所有类型的元素。 这意味着虽然你可能会看到许多可能的方法,当你点击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. 填写表格

下拉列表SELECT的准备知识:

整个是一个SELECT 下拉列表元素,其中每一项是option

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

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

all_options = element.find_elements_bytag_name("option")

for option in all_options:

print("Value is: %s" % option.get_attribute("value"))

option.click()

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

这不是处理SELECT元素的最有效方法。 WebDriver的支持类包括一个名为“Select”的类,它提供了与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。

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

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

all_selected_options = select.all_selected_options

获得所有可用options选项:

options = select.options

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

# Assume the button has the ID "submit" :

driver.find_element_by_id("submit").click()

或者,WebDriver在每个元素上都有“submit”的方法。WebDriver将遍历DOM模型上的元素,直到找到封闭的表单中的元素,然后调用submit。 如果元素不在表单中,则会引发NoSuchuchElementException 异常

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

接下来,对驱动程序的所有调用都将被解释为定向到特定窗口。 但你怎么知道窗口的名字? 看一下打开它的javascript或链接URL:

<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 *。

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

driver.switch_to_default_content()

3.5. 弹出对话框

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

alert = driver.switch_to_alert()

这将返回当前打开的弹出对话框对象。 使用此对象,你现在可以接受,关闭,读取其内容,甚至可以键入提示。 此switch_to_alert方法在弹alerts窗,confirms确认弹窗和prompts提示等对话弹窗中同样有效。 有关更多信息,请参阅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 t你he 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

---------------------------------------------------------------------

请关注pyhelloworld, 获取更多精彩内容

Tags:

最近发表
标签列表