等待切换和鼠标操作

三大等待

等待 3 种方式
1、强制等待,硬性等待,time.sleep(),暂停代码运行。
2、智能等待,隐性等待, 全局只需要设置一次
3、显性等待,条件。

隐性等待:启动浏览器之后,不忘记设置隐性等待。find_element
强制:time.sleep()
显性等待:每需要用到一次,就要启动一次, 不仅可以等元素查找,而且其他的等待。
用起来比较复杂。

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions

driver = webdriver.Firefox()

# 设置隐性等待, 单位是 s
driver.implicitly_wait(10)
"""
隐性等待:只能用来等待元素出现。

(比如等待一个元素,会给予10秒钟的时间,在10秒之内,元素出现它就会立刻加载出来,如果超过10秒钟,那就真的找不到元素。下一个元素又是重头再按照:会给予10秒钟的时间,在10秒之内,元素出现它就会立刻加载出来,如果超过10秒钟,那就真的找不到元素。)
隐性等待只针对find_element 
案例:elem = dirver.find_element(By.XPATH,'//input[@id="kw"]')

启动浏览器只需要设置一次。
"""


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

# 使用显性等待
# wait = WebDriverWait(driver, 10)
# locator = (By.XPATH,'//input[@id="kw"]')
# 等待某个元素加载
# elem = wait.until(expected_conditions.presence_of_element_located(locator))

# 等待元素可见
# elem = wait.until(expected_conditions.visibility_of_element_located(locator))

# 等待元素可以被点击
# elem = wait.until(expected_conditions.element_to_be_clickable(locator))

elem = dirver.find_element(By.XPATH,'//input[@id="kw"]')
elem.send_keys('十七岁的那些年')
elem.submit()

"""
# 等待的条件:直到页面的标题当中包含 "十七岁的那些年"
# wait ... until ... title_contains("十七岁的那些年")
# 时间超出了,就会报错。
# 显性等待一般可以被 time.sleep 替换
"""
# wait = WebDriverWait(driver, timeout=10, poll_frequency=0.2)
# wait.until(expected_conditions.title_contains('十七岁的那些年'))


# 强制等待
# time.sleep(3)

print(driver.title)
driver.quit()

==============================================================================

窗口切换

窗口切换 driver.switch_to.window(driver.window_handles[-1])
iframe: name, webelement, index, 退出
alert: a = driver.switch_to.alert a.accept()

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()

# 设置隐性等待, 单位是 s
driver.implicitly_wait(10)

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

elem = dirver.find_element(By.XPATH,'//input[@id="kw"]')
elem.send_keys('十七岁的那些年')
elem.submit()

# 查找京东
driver.find_element_by_link_text('京东').click()

"""
切换
窗口的句柄传进去。
现在打开的所有的窗口句柄
"""
# 现在打开的所有的窗口句柄
# print(driver.window_handles)

# 打印现在的窗口句柄
# print(driver.current_window_handle)

handle = driver.window_handles[-1]
driver.switch_to.window(handle)

# 强制等待
time.sleep(3)

driver.quit()

=======================================================

iframe

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=html_select')

# 如果想找一个 iframe 当中的元素,不能直接查找,而是先要进入 iframe 当中,
# 提供iframe 的标识: index, name, iframe Webelement

# 通过 WebElement 切换		
iframe = driver.find_element('id', 'iframeResult')	
driver.switch_to.frame(iframe)

# 通过 name 属性切换
driver.switch_to.frame('iframeResult')			

# 通过索引切换
driver.switch_to.frame(0)						

elem = driver.find_element('xpath', '//select')

# 退回主页面
driver.switch_to.default_content()				

# 退回父级iframe
# driver.switch_to.parent_frame()

print(elem)

================================================================

alert

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(4)
driver.get('file:///D:/classes/web_auto_testing/%E7%AC%AC4%E8%AF%BE%EF%BC%9A%E9%A1%B5%E9%9D%A2%E4%BA%A4%E4%BA%92%E6%93%8D%E4%BD%9C/alert_demo.html')

h2 = driver.find_element('xpath', '//h2')
h2.click()

# 切换到 alert, 点击确定, 没有括号,也不需要传参数, 全局只有一个。
my_alert = driver.switch_to.alert	

# 确定
my_alert.accept()						
  
# # 取消
# my_alert.dismiss()

driver.find_element('xpath', '//h2')

=====================================================================

鼠标操作

鼠标操作:
1、单击 e.click()
2、悬停,移动
3、双击
4、右击
5、拖拽

鼠标操作
双击, ac.double_click(elem).perform()
右击, ac.context_click(elem).perform()
移动, ac.move_to_element(elem).perform()
拖拽: ac.drag_and_drop(elem1, elem2).perform()

import time
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Firefox()
driver.implicitly_wait(4)
driver.get('file:///D:/classes/web_auto_testing/%E7%AC%AC4%E8%AF%BE%EF%BC%9A%E9%A1%B5%E9%9D%A2%E4%BA%A4%E4%BA%92%E6%93%8D%E4%BD%9C/alert_demo.html')


# 复杂版:
# 初始化 ActionChains: 动作链条,
action = ActionChains(driver)

# 定位一个元素
h2 = driver.find_element('xpath', '//h2')

# 简单
# h2 = driver.find_element('xpath', '//h2')
# h2.click()

# click 操作
action.click(h2).perform()

time.sleep(5)


=============================================================
下拉框元素定位

import time

from selenium import webdriver
from selenium.webdriver import ActionChains

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

# 找到要移动到的元素
setting = driver.find_element('xpath', "//span[text()='设置']")

# 鼠标悬停, move_to_element
ac = ActionChains(driver)
ac.move_to_element(setting).perform()

time.sleep(3)

# 找到高级搜索
adv_setting = driver.find_element('xpath', "//a[text()='高级搜索']")
adv_setting.click()
# ac.click(adv_setting).perform()

time.sleep(2)

# 链式调用
# ac.move_to_element(setting).click(adv_setting).drag_and_drop().context_click().perform()

========================================================================

键盘输入

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.implicitly_wait(10)

driver.get('http://www.baidu.com')
input = driver.find_element('id', 'kw')
input.send_keys('哈哈')

# 方式一:找到百度一下这个按钮,点击元素
# 方式二:
# 如果该元素不在 form 表单下,还能通过这种方式提交吗?? 不能
input.submit()

# 方式三: 触发键盘上的 回车键
input.send_keys(Keys.ENTER)
input.send_keys(Keys.CONTROL, Keys.SPACE)


#全局执行 传键盘操作
ac = ActionChains(driver)
ac.send_keys(Keys.CONTROL).perform()

=====================================================

发送JS

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.implicitly_wait(10)

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


# 执行js指令。
js_code = 'return  document'
driver.execute_script(js_code)

# 有哪一些指令在 selenium 当中不存在的
# 1、
el = driver.find_element()
el.get_attribute('href')
el.set_attribute()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值