专栏名称: 51Testing软件测试网
51Testing软件测试网,人气最旺的软件测试技术门户,提供软件测试社区交流,软件测试博客,人才服务,测试沙龙,测试杂志,测试资料下载等全方位信息服务,是国内最专业的软件测试就业培训、企业服务供应商...
目录
相关文章推荐
51好读  ›  专栏  ›  51Testing软件测试网

Selenium三大切换的骚操作之显性等待

51Testing软件测试网  · 公众号  · 测试  · 2019-09-29 17:38

正文

请到「今天看啥」查看全文


from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

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

driver.maximize_window()

driver.find_element_by_id("kw").send_keys("python")

driver.find_element_by_id("su").click()

loc = (By.XPATH, "//a[text()=' 基础教程 | 菜鸟教程']")

WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))

cur_handles = driver.window_handles   # 点击操作之前的窗口总数为1

driver.find_element(*loc).click()   # 点击后新的窗口出现

# 等待一下,窗口总数会变成2个

# 切换到新的窗口,在新窗口去操作元素。

# Ec条件 -- 等待新窗口出现

WebDriverWait(driver, 20).until(EC.new_window_is_opened(cur_handles))  # 更稳定的窗口等待

# 再次获取窗口列表 。总数为2

# 1、获取当前打开的所有窗口。--- 窗口列表。handles

wins = driver.window_handles

print(wins)

# 打印打前窗口的句柄

print(driver.current_window_handle)

# 2、切换的语句,切换到你想操作元素所在的窗口。进入到了新的html页面 - 新的窗口 wins[-1]

driver.switch_to.window(wins[-1])

# 3、在新的页面当中,找元素,并操作。

loc = (By.XPATH, "//ul[@class='pc-nav']//a[text()='首页']")

WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))

driver.find_element(*loc).click()

二、iframe切换


iframe表示在主html上嵌入的子html页面如下图所示:
当我们要在新的html页面操作元素,就要切换到新的html页面后才能进行接下来的操作,常用方法如下:
switch_to.frame(path): 切换到新的html页面,path支持下标、name、WebElement对象三种参数
switch_to.default_content(): 切换到主html页面
switch_to.parent_frame(): 切换到上一层html页面(父页面)
在iframe切换中也有等待,除了使用time.sleep()方法外,EC给了我们一个方法为frame_to_be_available_and_switch_to_it(),表示iframe有效并切换到iframe当中,它支持下标、name、WebElement对象以及元组四种方法传参, 两种方法如下:
方法一(使用time.sleep()强制等待):

import time

from selenium import webdriver







请到「今天看啥」查看全文