1.元素定位

一、注意事项

find_element_by:只返回一个元素,找不到元素则报错

find_elements_by:返回匹配到的所有元素,当没有找到元素时不会报错,而是返回空列表[ ]

元素定位优先级: ID>name>css selector>xpath

在项目中我们可能用的最多的是css或者xpath,那么针对这两种,我们优先选择css,原因在哪些?

原因1:css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀

原因2:语言简洁,明了,相对xpath

原因3:前端开发主要是使用css,不使用xpath,所以在技术上面,我们可以获得帮助的机会非常多

定位元素注意事项:

找到待定位元素的唯一属性

如果该元素没有唯一属性,则先找到能被唯一定位到的父元素/子元素/相邻元素,再使用> , " " , +等进行辅助定位

不要使用随机唯一属性定位

最重要的是多跟研发沟通,尽量把关键元素加上ID或者name,并减少不合理的页面元素,例如重复ID这样的事情最好不要发生

二、元素定位方法

1.id定位:find_element_by_id("id")

2.class定位:find_element_by_class_name("class")

3.name定位:find_element_by_name("name")

4.tag定位:find_element_by_tag_name("div")

5.link定位:find_element_by_link_text("新闻")

6.partial link定位:find_element_by_partial_link_text("一个很长的")

7.xpath定位:绝对路径定位、利用元素属性定位、层级与属性结合、使用逻辑运算符

 (1)绝对路径定位:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")

        find_element_by_xpath()方法使用XPath语言来定位元素。XPath主要用标签名的层级关系来定位元素的绝对路径,最外层为html语言。在body文本内,一级一级往下查找,如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个,例如,div[2]表示当前层级下的第二个div标签。

 (2)利用元素属性定位:find_element_by_xpath("//*[@id='kw']")  #注意外层 " 符号和内层 ' 符号

        //表示当前页面某个目录下,input 表示定位元素的标签名,[@id="kw"]表示这个元素的 id 属性值等于kw。下面通过name和class属性值来定位。浏览器开发者工具F12,复制,XPath

  (3)层级与属性结合:find_element_by_xpath('//[@id="cnblogs_post_body"]/p[1]/a[1]')

       如果一个元素本身没有可以唯一标识这个元素的属性值,name我们可以找其上一级元素,如果它的上一级元素有可以唯一标识属性的值。也可以拿来使用。

   (4)使用逻辑运算符:find_element_by_xpath('//input[@id="kw"and @class="su"]/span/input')

8.Css定位:

    (1) 通过 class 属性定位:find_element_by_css_selector(".s_ipt")

    (2) 通过 id 属性定位:find_element_by_css_selector("#kw")

    (3) 通过标签名定位:find_element_by_css_selector("input")

    (3.1)通过父子关系定位:find_element_by_css_selector("span>input")

    (3.2)通过属性定位:find_element_by_css_selector("[autocomplete=off]")

    (3.3)组合定位:find_element_by_css_selector("span.bgs_btn_wr>input#su")

9.用By定位:

针对前面介绍的 8 种定位方法,WebDriver 还提供了另外一套写法,即统一调用 find_element()方法,通过 By 来声明定位的方法,并且传入对应定位方法的定位参数,具体如下:

    find_element(By.ID,"kw")

    find_element(By.NAME,"wd")

    find_element(By.CLASS_NAME,"s_ipt")

    find_element(By.TAG_NAME,"input")

    find_element(By.LINK_TEXT,"登陆")

    find_element(By.PARTIAL_LINK_TEXT,"登")

    find_element(By.XPATH,"//*[@class='bgs_btn']")

    find_element(By.CSS_SELECTOR,"span.bgs_btn_wr>input#su")

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容