Selenium---八大定位方法,三种等待方式

目录

八种元素基本定位方法:

三大等待方式:强制等待,隐式等待,显式等待

强制等待:time.sleep()

隐式等待:implicitly_wait()

显式等待: WebDriverWait()

iframe窗口的切换

八种元素基本定位方法:

1.根据元素id属性定位元素(重点)

element = driver.find_elemet_by_id('')

2.根据class属性定位元素 (通常不用,因为找到的元素可能不唯一)

element = driver.find_element_by_class_name('')

 3.根据标签名定位元素 (通常不用,因为找到的元素可能不唯一)

element = driver.find_element_by_tag_name('input')

4.通过链接标签的(a)的文本去查找(不常用)

element = driver.find_element_by_link_text('新闻')

5.通过链接标签的(a)的文本去查找(部分匹配)(不常用)

element = driver.find_element_by_partial_link_text('新')

6.通过元素的name属性定位元素(不常用)

element = driver.find_element_by_name('')

7.通过xpath定位表达式查找元素(重点-定位元素特别精准)

浏览器支持在F12,查看源代码处直接copy表达式xpath语句,有绝对路径和相对路径(ctrl+f 验证)

element = driver.find_element_by_xpath('')

8.通过css定位表达式查找元素

element = driver.find_element_by_css_selector('')

三大等待方式:强制等待,隐式等待,显式等待

强制等待:time.sleep()

强制等待是利用python语言自带的time库中的sleep()方法,最简单的等待方式

form time import sleep

time.sleep(5)

脚本一旦执行到该语句sleep(5) 就会睡5s,再执行后面的语句,是一个强制等待的方式,会使整个脚本暂停

缺点:设置时间短了没用,长了又浪费时间

隐式等待:implicitly_wait()

在脚本中我们一般看不到等待语句,但是它会在每个页面加载的时候自动等待;隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。

driver = webdriver.Chrome()

driver.implicitly_wait(10)

implicitly_wait()方法用来等待页面加载完成(直观的就是浏览器tab页上的小圈圈转完),implicitly_wait(10),超时时间10s,10秒内一旦加载完成,就执行下一条语句;如果10秒内页面都没有加载完,就超时抛出异常

显式等待: WebDriverWait()

显式等待与隐式等待相对,显式等待必须在每个需要等待的元素前面进行声明。

默认抛出异常为:NoSuchElementException。

该方法需要导入By 、WebDriverWait 、expected_conditions

# 工作中显式等待的写法:(本例表示:最多等30s,每隔0.5s检查一下,直到目标节点符合预期条件--可见)
WebDriverWait(driver, 30, 0.5).until(
    EC.visibility_of_element_located((By.XPATH, "//a[text()='新闻']")))

iframe窗口的切换

1、iframe

页面内嵌窗口(html内嵌套html。多窗口就是有多个html文件,所以iframe也要窗口切换)

2、 切到 iframe 页面的常用方法

方法1:索引,适用于只有一个iframe的情况

driver.switch_to.frame(0)

 方法2:name属性

driver.switch_to.frame("iframe的name属性")

 方法3:webElement对象
即:先找到要切换的 iframe 元素,
再通过 driver.switch_to.frame(iframe_el) 切换窗体

你可能感兴趣的:(selenium,测试工具)