python3使用selenium下篇

2018-09-26  本文已影响14人  test小星星

接上篇

页面操作方法

1. 多frame(框架)切换
在Web应用中经常会遇到frame/iframe嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe内嵌页面上的元素无法直接定位,这时就通过switch_to.frame()方法将当前定位的主体切换为frame/iframe的内嵌页面中。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('test_frame.html')
# 切换到frame(id="if")的框架
driver.switch_to.frame("if")
# 下面就可以正常的操作里面的元素了
driver.find_element_by_id("kw").send_keys("selenium")

# 如果没有id和name的情况
fr = driver.find_element_by_xpath('//*[@class="if"]')
driver.switch_to.frame(fr)
# 下面就可以正常的操作里面的元素了
driver.find_element_by_id("kw").send_keys("selenium")

switch_to.frame()可以直接取frame的id或name,如果没有id和name可以先通过xpath定位到iframe,再将定位对象传给switch_to.frame()方法。
如果完成了在当前frame上的操作,则可以通过switch_to.parent_content()方法跳出当前一级表单,该方法默认对应与离它最近的switch_to.frame()方法,除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面。
2. 多窗口切换
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时候就需要主机切换到新打开的窗口上进行操作。
操作方法:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get('http://www.baidu.com')

# 获得当前窗口的句柄
sreach_windows = driver.current_window_handle
driver.find_element_by_link_text("地图")
# 获得当前所有打开的窗口句柄
all_handles=driver.window_handles
# 切换到地图窗口
for handle in all_handles:
    if handle != sreach_windows:
        driver.switch_to.window(handle)
         操作元素.....
# 切换到原来窗口
or handle in all_handles:
    if handle == sreach_windows:
        driver.switch_to.window(handle)

3. 警告处理
在页面操作中有时会遇到JavaScript所生成的alert、confirm以及prompt弹框,可以使用switch_to_alert()方法定位到。然后使用text/accept/dismiss/send_keys等方法进行操作。

4. 操作Cookie
WebDriver操作cookie的方法

5. 调用JavaScript代码
WebDriver提供了execute_script()方法来执行javaSrcipt代码。

js = "要执行的js代码"
driver.execute_script(js)

6. 窗口截图
WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。
driver.get_screenshot_as_file("保存的路径')

7. 判断元素是否存在

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")


def is_element_exist(css):
    try:
        driver.find_element_by_css_selector(css)
        return True
    except:
        return False
print(is_element_exist('#kw'))

# 判断页面上有无id为kw的元素
if is_element_exist("#kw"):
    driver.find_element_by_id("kw").send_keys("selenium")
# 判断页面有无标签为input元素
if is_element_exist("input"):
    driver.find_element_by_tag_name("input").send_keys("selenium")
# 判断页面有无id为xxx的元素
if is_element_exist("xxx"):
    driver.find_element_by_id("xxx").send_keys("selenium")

上一篇 下一篇

猜你喜欢

热点阅读