①如果我们输入的内容包含特殊的按键,比如回车、空格等,或者我们想要输入组合按键,我们就需要使用Keys模块:
from selenium.webdriver.common.keys import Key
如果我们想要输入空格:
a = driver.find_element_by_Tag_name('input') a.send_keys(Keys.SPACE)
如果我们想要同时输入Ctrl+a:
a = driver.find_element_by_Tag_name('input') a.send_keys(Keys.CTRL,'a')
常见按键:
回车 | Keys.ENTER |
空格 | Keys.SPACE |
制表 | Keys.TAB |
删除 | Keys.BACK_SPACE |
ESC | Keys.ESCAPE |
Ctrl | Keys.CONTROL |
Shift | Keys.SHIFT |
F1(其余依此类推) | Keys.F1 |
②等待:
selenium有显式等待和隐式等待,隐式等待就是强制等待,等待完成后继续执行,而显式等待则显得更加灵活,如果在等待时间内,我们需要的目标加载出现了,或者我们不需要的目标消失了,selenium就不会继续等待,会开始执行之后的内容,而如果条件一直不满足,selenium则会在到达最大等待时间后不再等待,开始执行后面的内容。
1>
隐式等待:
需要使用到implicitly_wait()方法:
from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10)
implicitly_wait()括号中填入需要等待的时间,单位是秒
同样,这种方法也能通过time.sleep()实现
2>
显式等待:
显式等待需要引入两个模块:
from selenium.webdriver.support import expected_conditions
和
from selenium.webdriver.support.wait import WebDriverWait
其中,如果觉得expected_conditions过长,我们可以采取别名的方式:
from selenium.webdriver.support import expected_conditions as EC
这样,我们以后可以用EC来代替expected_conditions了
显式等待我们需要使用到WebDriverWait(),正常情况下我们可以传入三个参数:
Ⅰ.driver:
传入WebDriver实例
Ⅱ.timeout:
超时时间,等待的最长时间
Ⅲ.poll_frequency:
调用until或者until_not中的方法的间隔时间,默认是0.5秒
显式等待有两种等待方式:
until和until_not
until(method,message) until_not(method,message)
Ⅰ.method:
在等待期间,每隔一段时间调用这个传入的方法,until是当某元素出现或者什么条件成立时继续执行,until_not是当某元素消失或者什么条件不成立时继续执行
Ⅱ.message:
如果超时,抛出TimeoutException,将message传入异常
这里的method参数我们使用expected_conditions来进行封装
expected_conditions提供的条件有:
1>验证url:
传入url,包含时返回True | url_contains() |
传入正则表达式 | url_matches() |
传入url,完全匹配时返回True | url_to_be() |
传入url,不匹配时返回True | url_changes() |
2>验证元素是否出现:
传入元组类型locator | presence_of_element_located() |
传入元组类型的locator,要求全部出现 | presence_of_all_elements_located() |
3>判断某文本是否出现在某元素中
判断元素的text | text_to_be_present_in_element() |
判断元素的value | text_to_be_present_in_element_value() |
判断元素的attribute | text_to_be_present_in_element_attribute() |
4>判断元素是否可见并且可被点击
判断元素是可见并能被点击的 | element_to_be_clickable |
5>验证元素是否可见
传入WebElement验证可见 | visibility_of_element |
传入元组类型的locator,验证可见 | visibility_of_element_located |
传入元组类型的locator,验证可见(只要有一个可见就可以) | visibility_of_any_element_located |
传入元组类型的locator,验证可见(所有都可见才可以) | visibility_of_all_element_located |
传入WebElement或locator,验证不可见 | invisibility_of_element |
传入元组类型的locator,验证不可见 | invisibility_of_element_located |
6>判断是否打开新窗口,并且窗口句柄数量会增加
new_window_is_opened
7>判断窗口数量,传入期望的窗口数量
number_of_windows_to_be
8>判断是否有alert出现
alert_is_present
9>判断元素是否被选中
传入WebElement对象 | element_to_be_selected |
传入元组类型的locator | element_located_to_be_selected |
传入WebElement对象及状态,相等返回True,否则False | element_selection_state_to_be |
传入locator及状态,相等返回True,否则False | element_located_selection_state_to_be |
10>等某个节点从DOM数中移除,如果该元素仍然存在返回False,否则返回True,常用于判断页面是否已经刷新
staleness_of