Selenium经典API操作
三种等待方式
1.强制等待——sleep(等待时间) time库中的sleep()函数 不管怎么样,让等几秒就等几秒 真正测试的时候不需要死等,只要页面刷新出元素了就可以往下进行。但是不等直接进行页面定位的话有可能页面没加载完成就去定位了,因为电脑肯定比人要快,所以有可能会页面还没加载完,定位的脚本已经开始执行了,结果发现定位不到元素。这时就要加隐式等待,等页面加载完再去定位。 2.隐式等待——implicitly_wait(最大加载时长) 页面元素一个都不能少,全都加载完再结束。也可以设置一个最大加载时长,如果时间到了还没加载完会报错。 一个driver对象只需要设置一次隐式等待。 3.显式等待 等一个特定的条件,只要要等的元素加载出来了就往下进行。并不是建立在整个页面都加载完的基础上,只要我等的元素加载完就可以。 显示等待会定时查看条件是否满足
判断窗口title
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver, 15).until(EC.title_is("乐搏商城 - 演示站点"))
print("窗口的title:", driver.title)
定位到页面元素
WebDriverWait(driver, 10).until(EC.visibility_of(driver.find_element("id", "search-input")))
用显示等待定位弹窗 定位这种一闪而过的弹窗,可以在F12中找到Source(源代码),在弹窗出现的瞬间点击暂停,暂停后点击F12左上角的箭头,然后再去定位就可以了
driver.find_element("link text", "登录").click()
driver.find_element("name", "accounts").send_keys("lebo19_001")
driver.find_element("name", "pwd").send_keys("lebo19.001")
driver.find_element("xpath", "//button[text()='登录']").click()
WebDriverWait(driver, 10).until(EC.visibility_of(driver.find_element("xpath", "//*[@class='prompt-msg']")))
显示等待的常用方法 | 方法名 |
---|
判断标题是否和预期的一致 | title_is | 判断标题中是否包含预期的字符串 | title_contains | 判断指定元素是否加载出来 | presence_of_element_located | 判断所有元素是否加载完成 | presence_of_all_elements_located | 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator | visibility_of_element_located | 判断元素是否可见,传入参数是定位后的元素WebElement | visibility_of | 判断某个元素是否不可见,或是否不存在于DOM树 | nvisibility_of_element_located | 判断元素的 text 是否包含预期字符串 | text_to_be_present_in_element | 判断元素的 value 是否包含预期字符串 | text_to_be_present_in_element_value | 判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement | frame_to_be_available_and_switch_to_it | 判断是否有alert出现 | alert_is_present | 判断元素是否可点击 | element_to_be_clickable | 判断元素是否被选中,一般用在下拉列表,传入WebElement对象 | element_to_be_selected | 判断元素是否被选中 | element_located_to_be_selected | 判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False | element_selection_state_to_be | 判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False | element_located_selection_state_to_be | … | … |
模拟键盘操作
from selenium.webdriver.common.keys import Keys
item = driver.find_element("name", "wd")
item.send_keys("手机充电器")
sleep(1)
item.send_keys(Keys.BACKSPACE)
sleep(1)
item.send_keys(Keys.BACKSPACE)
sleep(1)
item.send_keys(Keys.BACKSPACE)
sleep(1)
item.send_keys(Keys.CONTROL, "z")
sleep(3)
键盘上的键几乎全都封装了
模拟键盘操作↓
send_keys(Keys.BACK_SPACE) :删除键(BackSpace)
send_keys(Keys.SPACE) :空格键(Space)
send_keys(Keys.TAB) :制表键(TAB)
send_keys(Keys.ESCAPE) :回退键(ESCAPE)
send_keys(Keys.ENTER) :回车键(ENTER)
send_keys(Keys.CONTRL,'a') :全选(Ctrl+A)
send_keys(Keys.CONTRL,'c') :复制(Ctrl+C)
send_keys(Keys.CONTRL,'x') :剪切(Ctrl+X)
send_keys(Keys.CONTRL,'v') :粘贴(Ctrl+V)
send_keys(Keys.F1) :键盘F1
send_keys(Keys.F12) :键盘F12 …
模拟鼠标操作
点击鼠标右键
from selenium.webdriver.common.action_chains import ActionChains
item = driver.find_element("link text", "登录")
print("移动到登录按钮")
ActionChains(driver).move_to_element(item)
item.click()
print("点击鼠标右键")
ActionChains(driver).context_click().perform()
拖拽操作 拖拽操作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。 ActionChains(driver).drag_and_drop(鼠标按下开始,鼠标抬起结束)
ActionChains(driver).drag_and_drop(driver.find_element("name", "wd"), driver.find_element("name", "accounts"))
print("拖拽操作从搜索框开始,到输入登录用户名的输入框结束")
鼠标悬停 当鼠标在网页的部分图标、文字或者图片上停留的时候,会有部分内容弹出,当从这个图标、文字或者图片上移开鼠标后,弹出的内容自动缩回
item = driver.find_element("xpath", "//span[text()='食品饮料']")
sleep(1)
ActionChains(driver).move_to_element(item).perform()
控制滚动条 通过JavaScript来控制
js = "window.scrollTo(0,10000)"
driver.execute_script(js)
sleep(2)
js = "window.scrollTo(0,0)"
driver.execute_script(js)
sleep(2)
js = "window.scrollTo(0,100)"
driver.execute_script(js)
|