笔记1-- UI 元素定位
一、元素定位
1、如果元素定位不到,可能的原因如下:
- 元素没有加载完成
- 元素在Frame中
- 元素不可用,不可读或不可见
- 元素有动态属性,在动态DIV中
2、元素定位的方法:8种
id, name, class_name, xpath, css, tag_name, link_text, partial_link_text
id 定位:
driver.find_element(By.ID,"kw")
name 定位:
driver.find_element(By.NAME,"wd")
link_text 定位:
driver.find_element(By.LINK_TEXT,"新闻").click()
partial_link_text 定位:
driver.find_element(By.LINK_TEXT,"新").click()
xpath 定位:
绝对路劲:/ 开头 --> /html/body/div[1]/div[1]/div[5]/div/div/form/span[1]/input
相对路劲://开头 --> //*[@id="kw"]
-
相对路劲+索引定位
driver.find_element(By.XPATH,"//form/span[1]/input").send_keys("逆流的鱼2016")
-
相对路劲+属性定位
# autocomplete='off'是input标签种唯一的属性 driver.find_element(By.XPATH,"//input[autocomplete='off']").send_keys("逆流的鱼2016")
-
相对路劲+通配符定位
#通配符*后使用id属性,实际还是使用ID来定位 driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("逆流的鱼2016")
-
相对路劲+部分属性值定位
# 以某字符开头的属性,在F12窗口下搜索元素//*[starts-with(@autocomplete,"of")] driver.find_element(By.XPATH, "//*[starts-with(@autocomplete,'of')]").send_keys("逆流的鱼2016") #结尾包含某字符 driver.find_element(By.XPATH, "//*[substring(@autocomplete,2)='ff']").send_keys("逆流的鱼2016") #包含关键字符 driver.find_element(By.XPATH, "//*[contains(@autocomplete,'ff')]").send_keys("逆流的鱼2016")
-
相对路劲+文本定位
#定位到元素,然后获取属性
attr = driver.find_element(By.XPATH, "//span[text()='按图片搜索']").get_attribute("class")
css 定位:
-
绝对路劲:弃用
driver.find_element(By.CSS_SELECTOR, "html body div div div div div form span input").send_keys("逆流的鱼2016") #或 driver.find_element(By.CSS_SELECTOR, "html>body>div>div>div>div>div>form>span>input").send_keys("逆流的鱼2016")
-
通过ID 定位
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("逆流的鱼2016")
-
通过class定位
driver.find_element(By.CSS_SELECTOR, ".s_ipt").send_keys("逆流的鱼2016")
-
通过其他属性定位 [属性名=“属性值”]
#单个属性 driver.find_element(By.CSS_SELECTOR, "[autocomplete='off']").send_keys("逆流的鱼2016") #多个属性 driver.find_element(By.CSS_SELECTOR, "[autocomplete='off'][name='wd']").send_keys("逆流的鱼2016")
-
通过部分属性定位 [属性名=“属性值”]
匹配符号: * 包含某个字符
^ 以什么开头
$ 以什么结尾#属性值包含of driver.find_element(By.CSS_SELECTOR, "[autocomplete*='of']").send_keys("逆流的鱼2016") #属性值以of开头 driver.find_element(By.CSS_SELECTOR, "[autocomplete^='of']").send_keys("逆流的鱼2016") #属性值以ff结尾 driver.find_element(By.CSS_SELECTOR, "[autocomplete$='ff']").send_keys("逆流的鱼2016")
-
查询子元素(层级)定位,一般会跟id,class或属性定位一起配合使用
上下级符号:> 或 空格#纯层级 driver.find_element(By.CSS_SELECTOR, "form>span>input").send_keys("逆流的鱼2016") #跟id组合 driver.find_element(By.CSS_SELECTOR, "form#form>span>input").send_keys("逆流的鱼2016")
-
查询兄弟节点定位
兄弟节点:同一父级标签,下面有多个相同标签的元素,那么这些元素就是兄弟节点
第一个节点:first-child
第二~N: nth-child(n) n是元素序号
最后一个: last-child
#div作为父级,id=s-top-left,底下有多个a标签
driver.find_element(By.CSS_SELECTOR, "div#s-top-left a:first-child").click()
#打开第三个标签
driver.find_element(By.CSS_SELECTOR, "div#s-top-left a:nth-child(3)").click()
#打开最后一个标签,这个python3.9以上版本不太好使
driver.find_element(By.CSS_SELECTOR, "div#s-top-left a:last-child")
***************用努力照亮现实的梦!***********************
本文来自博客园,作者:逆流的鱼2016,转载请注明原文链接:https://www.cnblogs.com/orange2016/p/17655945.html