python selenium find_elements(Selenium Python bindings 文档二)
3 跳转
使用Webdriver要做的第一件事情是跳转到一个页面 。一般的方式是通过调用get方法 。
driver.get("http://www.python.org")
WebDriver在返回对测试或脚本的控制之前一直等到页面完全载入为止 。但是如果页面使用了很多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 。我们使用相同的接口来代表各种元素 。这意味着在使用IDE的自动完成功能的时候 ,你或许看到很多可以调用的方法。但是不是所有的都行得通或者可行 。但是无需担心!WebDriver将试图去做正确的事情 ,而且如果你调用了一个行不通的方法 ,会抛出一个异常 。
你得到了一个元素,你能做什么呢?首先 ,你也许想在输入框中输入一段文字 。
Element.send_keys(“some text ”)
你可以通过Keys类模仿按箭头键
Element.send_keys(“and some ”, Keys.ARROW_DOWN)
在任意元素上都是可以调用send_keys的 ,这使得测试键盘快捷键比如用在Gmail上的,成为可能 。一个副作用是在输入框中输入字符将不会自动清空 。反而 ,你输入的将会被添加在已有文本之后 。你可以很容易使用clear方法清空输入框或输入区域的内容 。
Element.clear()
3.2 填充表单
我们已经看到如何在输入框里输入字符 ,但是 ,其他元素呢?你可以选择选择框的状态 ,你可以使用setSelected来设置比如选项标签为选中状态 。处理SELECT选项并不是太坏 。
Select = driver.find_element_by_xpath(“//select ”)
All_options = select.find_element_by_tag_name(“option ”)
For option in all_options:
Print “value is: %s ” %option.get_attribute(“value ”)
Option.click()
这将会发现页面上第一个SELECT元素 ,然后循环通过每一根的OPTION ,打印出他们的值 ,然后依次选中每个 。
当你完成填充表单之后 ,你也许想提交它 。一个办法是找到submit按钮并点击它 。
# Assume the button has the ID “submit ”
Driver.find_element_by_id(‘submit’).click()
或者 ,WebDriver在每个元素上都有很方便的submit方法。如果你在一个form的元素上调用这个方法 ,WebDriver将会查询DOM树 ,直至发现包含它的form然后调用submit 。如果元素没有在form里面 ,将会抛出NoSuchElementExcellent
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)
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_handlers:
Driver.switch_to_window(handle)
也可以在帧之间切换
Driver.switch_to_frame(“frameName ”)
也可以通过用点分解路径访问子帧 ,可以通过指定index来确定帧 。
Driver.switch_to_frame(frameName.0.child)
3.5 弹出窗口
Selenium WebDriver有对处理弹出窗口的内置支持 。在你激发一个动作可以打开一个弹出窗口,你可以通过以下方式访问alert 。
Alert = driver.switch_to_alert()
这将返回当前打开的警告对象 。通过这个对象 ,你可以接受 ,取消 ,读取它的内容或甚至在提示里输入内容 。这个借口在警告 ,确认 ,提示里工作的一样好 。
3.6 导航:历史和定位
早先 ,我们使用get方法来涵盖跳转 。如你所见 ,WebDriver有很多更小的 ,任务集中的接口 ,导航是一个很有用的任务 。为了跳转到一个页面 ,你可以使用get方法:driver.get(“http://www.example.com ”)
为了在浏览器历史里向前或向后移动:
Driver.forward()
Driver.back()
请注意这个功能完全依赖于潜在的驱动 。
3.7 Cookies
Driver.get(“http://www.example.com ”)
# Now set the cookie. This one is valid for the entire domain
Cookie = {“key ”: “value ”}
Driver.add_cookie(cookie)
# And now output all the available cookies for the current URL
All_cookies = driver.get_cookies()
For cookie_name, cookie_value in all_cookies.items():
Print “%s -> %s ”, cookie_name, cookie_value
4 定位元素
有很多种在页面上定位元素的策略。你可以使用对你case最合适的那种 。Selenium提供下列方法来定位页面上的元素
Find_element_by_id
Find_element_by_name
Find_element_by_xpath
Find_element_by_link_text
Find_element_by_partial_link_text
Find_element_by_tag_name
Find_element_by_class_name
Find_element_by_css_selector
发现多个元素(这些方法将返回一个列表)
Find_elements_by_name
Find_elements_by_xpath
Find_elements_by_link_text
Find_elements_by_partial_link_text
Find_elements_by_tag_name
Find_elements_by_class_name
Find_elements_by_css_selector
4.1 通过ID定位元素
当你知道元素的id属性的时候使用这个方法 。通过这个策略 ,匹配定位的第一个具有id属性的元素将被返回 ,如果没有元素具有id属性,抛出NoSuchElementException。
例如 ,考虑下页面源文件
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
</form>
</body>
<html>
Form元素可以被如此定位:login_form = driver.find_element_by_id(“loginForm ”)
4.2 通过名字定位
当你知道元素的name属性的时候使用这个方法 。通过这个策略 ,匹配定位的第一个具有name属性的元素将被返回,如果没有元素具有name属性 ,抛出NoSuchElementException 。
例如 ,考虑下页面源文件
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
</form>
</body>
<html>
用户名和密码元素可以如下定位:
Username = driver.find_element_by_name(“username ”)
Password = driver.find_element_by_name(“password ”)
Continue = driver.find_element_by_name(“Continue ”)
4.3 通过xpath定位
Xpath是用来在XML文档中定位节点的语言 。
例如 ,考虑下页面源文件
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
</form>
</body>
<html>
Form元素可以如下定位:
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!