selenium常用api之元素定位有哪几种方法,selenium表单内的元素定位

  selenium常用api之元素定位有哪几种方法,selenium表单内的元素定位

  测试对象的定位和操作是selenium编写的自动化脚本和webdriver的核心内容。让我们在这篇文章中学习一些常见的元素定位方法。

  00-1010八个元素由元素id、元素名称、元素类名、链接文本和部分链接文本、css选择器、Xpath和tag_name定位。定位和操作测试对象是我们的责任。使用selenium编写自动化脚本和webdriver的核心内容,其中“操作”部分基于“selenium”元素的定位。因此,元素对象的定位变得越来越重要。接下来,我们来学习一下常见的元素定位方法有哪些。

  

目录

  一般定位一个元素的目的有以下几点:一是操作对象;也可以获取对象的一些属性,比如名称属性,类属性等等。这些都会用到元素定位,webdriver提供了八种常用的元素定位方法。

  id:按元素id定位(前提条件是元素必须有ID属性,下同)NAME:按元素名称定位类名:按元素类名属性定位链接文本:如果是标签,可以用链接文本定位部分链接文本:当标签内容很长时,可以用部分链接文本匹配部分内容进行定位。标签名:可以直接用标签名定位标签定位Xpath可以使用Xpath元素路径进行定位。Css选择器:使用css选择器进行定位。

  

八大元素定位方式

  鉴于以上定位方法一般很少出现在一个页面上,这里有一个本地的html页面,方便我们练习。

  首先,打开我们的本地html文件。通过查看页面的源代码,您可以看到电子邮件输入框具有id属性。在这里,您可以通过定位元素的id来定位元素,如下图所示:

  元素位置的示例代码如下:

  #编码:utf-8

  从时间进入睡眠

  从selenium导入web驱动程序

  Driver=webdriver。Chrome() #启动Chrome浏览器的驱动

  driver . maximize _ window()# Chrome浏览器最大化

  driver . get( file ://users/workspace/web _ test _ html/form.html )#打开本地“form . html”文件

  睡眠(2)

  Driver.find _ element _ by _ id(输入电子邮件)。Click () #通过id找到id= inputEmail 的元素,然后单击它。

  睡眠(1)

  driver.quit()

  运行结果如下:

  从上图中我们可以看到,Email输入框中的元素已经被id定位并点击。

  

通过元素 id 定位

  通过名称属性找到密码元素,然后单击,如下图所示:

  元素名称属性定位的示例代码如下:

  #编码:utf-8

  从时间进入睡眠

  从selenium导入web驱动程序

  Driver=webdriver。Chrome() #启动Chrome浏览器的驱动

  driver.maximize_window()

   # Chrome 浏览器最大化

  driver.get(file:///Users/workspace/WEB_TEST_HTML/form.html) # 打开本地的 "form.html" 文件

  sleep(2)

  driver.find_element_by_id("inputEmail").click() # 通过 id 定位 id="inputEmail"的元素,执行点击操作。

  sleep(2)

  driver.find_element_by_name("password").click() # 通过 name 定位 name="password",执行点击操作。

  sleep(1)

  driver.quit()

  

  运行结果如下:

  

  从上图中,我们可以看到通过 name 定位到了 Password 输入框的元素,并执行了点击操作。

  

  

通过元素 class name 定位

  通过元素的 class name 属性定位 Email 元素所在的 div,然后通过 js 的调试,让该 div 出现闪烁的效果。如果正常闪烁,则说明我们定位成功了。见下图:

  

  元素 class name 属性定位示例代码如下:

  

# coding:utf-8

  from time import sleep

  from selenium import webdriver

  driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver

  driver.maximize_window() # Chrome 浏览器最大化

  driver.get(file:///Users/workspace/WEB_TEST_HTML/form.html) # 打开本地的 "form.html" 文件

  sleep(2)

  element = driver.find_element_by_class_name("controls") # 将定位到的 "class name" 为 "controls" 的元素赋值给 element

  driver.execute_script($(arguments[0]).fadeOut().fadeIn(), element) # 通过 JS 执行的方式将 element 元素执行 消失、出现

  sleep(1)

  driver.quit()

  

  运行结果如下:

  

  从上图中,我们可以看到通过 class name 定位到了 Email 元素所在的 div 块,出现了闪烁的效果,说明我们已经定位到了该 class name = controls 的 div 块。

  

  

通过 link text 与 partial link text 定位

  通过 a 标签 的字符或者部分字符的匹配,定位到 register 元素。

  这里就不进行截图演示了,直接上代码吧。

  

# coding:utf-8

  from time import sleep

  from selenium import webdriver

  driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver

  driver.maximize_window() # Chrome 浏览器最大化

  driver.get(file:///Users/workspace/WEB_TEST_HTML/form.html) # 打开本地的 "form.html" 文件

  sleep(2)

  link = driver.find_element_by_link_text("register")

  driver.execute_script($(arguments[0]).fadeOut().fadeIn(), link)

  sleep(1)

  partile_link = driver.find_element_by_partial_link_text("reg")

  driver.execute_script($(arguments[0]).fadeOut().fadeIn(), partile_link)

  sleep(1)

  driver.quit()

  

  

  

通过 css selector 选择器定位

  一般情况下,不推荐视同这种方式,因为首先需要对 css 的语法有一定的理解,同时这种定位的方式呢,维护性较差。任何一个小的页面变动都会影响到我们已经利用 css selector 定位好的元素。

  获取 css selector 方式,见下图:

  

  通过 css selector 定位元素代码如下:

  

# coding:utf-8

  from time import sleep

  from selenium import webdriver

  driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver

  driver.maximize_window() # Chrome 浏览器最大化

  driver.get(file:///Users/workspace/WEB_TEST_HTML/form.html) # 打开本地的 "form.html" 文件

  sleep(2)

  div = driver.find_element_by_css_selector("body > form > div:nth-child(1) > div") # 这种css层级方式的维护性很差

  driver.execute_script($(arguments[0]).fadeOut().fadeIn(), div)

  sleep(2)

  driver.quit()

  

  截图就算了,一般不推荐使用。

  

  

通过 Xpath 定位

  通过 Xpath 定位元素,是最常用的方法之一,尤其是在前端页面不规范、没有 id、name等属性的情况下。获取 xpath 方式,见下图:

  

  利用 xpath 定位元代码示例如下:

  

# coding:utf-8

  from time import sleep

  from selenium import webdriver

  driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver

  driver.maximize_window() # Chrome 浏览器最大化

  driver.get(file:///Users/workspace/WEB_TEST_HTML/form.html) # 打开本地的 "form.html" 文件

  sleep(2)

  email_xpath = driver.find_element_by_xpath(//*[@id="inputEmail"]) # xpath 定位

  driver.execute_script($(arguments[0]).fadeOut().fadeIn(), email_xpath)

  sleep(2)

  driver.quit()

  

  运行结果如下:

  

  从上图中,我们可以看到通过 xpath 定位到了 Email 元素所,出现了闪烁的效果,说明我们已经定位到了该元素。

  使用 "xpath" 定位,可以使用 "id"、"name" 等更多的方式或者特殊的属性来定位到元素;建议通过基础属性定位的同时,使用 xpath 也依然显得更友好一些,也更便捷。未来做一些框架的封装的时候也会变得更简单。

  

  

通过 tag_name 定位

  通过查看页面元素,我们发现页面只有一个 form ,那么这个时候就可以利用 tag_name 直接定位到这个 form 了。见下图:

  

  通过 tag name 定位元素代码示例如下:

  

# coding:utf-8

  from time import sleep

  from selenium import webdriver

  driver = webdriver.Chrome() # 启动 Chrome浏览器的 driver

  driver.maximize_window() # Chrome 浏览器最大化

  driver.get(file:///Users/workspace/WEB_TEST_HTML/form.html) # 打开本地的 "form.html" 文件

  sleep(2)

  print(driver.find_element_by_tag_name("form").get_attribute("class")) # 打印输出 tag name 为 "form" 的 class 的 值

  driver.quit()

  

  运行结果如下:

  

  以上就是详解Selenium中元素定位方式的详细内容,更多关于Selenium元素定位的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: