一、 元素定位
1.1 八个定位策略
id、name、class、tag、link、patial_link、path、css
1.2 Xpath基本语法
-
/(开头)根路径
-
//(开头、中间) 任意层级路径
-
表示任意元素
-
@ 表示属性筛选
-
. 表示本级
-
.. 表示上级
1.3 Xpath定位函数
。text 获取元素内的文本 【精确匹配】
$x('//a[text()="新闻"]')
。contains 任意位置包含 【模糊匹配】
("//input[contains(@id,'fuck')]"))
。start_with 开头相同 【半模糊匹配】
$x('//a[start_with(text(),"新闻")]')
。轴定位法:parent,child, ancestor,following
1.4 元素交互
1.4.1 交互属性方法
click() #点击
clear() #清空内容
send_keys() #输入内容
get_attribute() #获取HTML元素的属性值【如输入框当前的内容】
# 获取输入框内的文本内容
res_text = browser.find_element(By.XPATH, "//div[@class='bs-message-notice bs-message-success']/div/div/div").text
1.4.2 三大等待
# 强制等待
time.sleep(10)
# 隐式等待
bw.implicitly_wait(10)
# 显示等待
import selenium.webdriver.support.expected_conditions as EC
# 获取结算成功提示信息并断言
locator = (By.XPATH, "//div[@class='bs-message-notice bs-message-success']/div/div/div")
WebDriverWait(browser, 5, 1).until(EC.presence_of_element_located(locator))
# 显示等待第一条记录是否出现
res_text = browser.find_element(By.XPATH, "//div[@class='bs-message-notice bs-message-success']/div/div/div").text
1.5 模拟键盘按键
-
模拟Enter键
from selenium.webdriver.common.keys import Keys
# 医生选择输入框输入医生姓名
blh= browser.find_element(By.XPATH, "//input[@id='SelectComposingTable']")
blh.send_keys("产科门诊")
blh.send_keys(Keys.ENTER)
1.6 切换iframe
-
switch_to.frame方法
-
driver.switch_to.frame(0) # 1.用frame的index来定位,第一个是0 driver.switch_to.frame("frame1") # 2.用id来定位 driver.switch_to.frame("myframe") # 3.用name来定位 driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # 4.用WebElement对象来定位 # 切出iframe browser.switch_to.default_content()
1.7 定位闪现的提示信息
-
方法:chrome开发者工具中点击sources,在弹出提示时点击暂停按钮,这样提示信息就可以一直在elements中显现,并可以正常定位,最后通过显式等待获取到定位信息,实操如下:
# 获取结算成功提示信息并断言
locator = (By.XPATH, "//div[@class='bs-message-notice bs-message-success']/div/div/div")
WebDriverWait(browser, 5, 1).until(EC.presence_of_element_located(locator)) # 显示等待第一条记录是否出现
res_text = browser.find_element(By.XPATH, "//div[@class='bs-message-notice bs-message-success']/div/div/div").text
assert res_text == "结算成功"