selenium元素定位实战


一、selenium环境搭建

环境搭建步骤:
1、在终端输入安装selenium的第三方的库的命令:pip3 install selenium
2、安装chrome的浏览器
3、下载浏览器对应的驱动程序(driver):http://npm.taobao.org/mirrors/chromedriver/
先查看浏览器的版本:浏览器--设置--关于
4.打开下载驱动的连接,下载与之相匹配的driver版本:(没有55也可以下45)

   

4、然后把chromedriver放到python的目录下(我是放在bin目录下):
打开终端cd ..进入根目录,cd/usr/local/bin 进入bin目录
输入 open . 打开bin目录,将解压后的包拖进来
5.终端输入chromedriver验证是否安装成功

 二、元素定位的八大方法

1.通过id(打开chrome浏览器,打开百度,右击点击检查打开开发者模式)

  搜索框输入的元素

   百度一下的元素

from selenium import webdriver
import time as t
#指定被测的浏览器并且对webdriver进行实例化
driver=webdriver.Chrome()
#导航到被测的网址
driver.get('http://www.baidu.com/')
#等待三秒
t.sleep(3)
driver.find_element_by_id('kw').send_keys('彭于晏')
t.sleep(3)
driver.find_element_by_id('su').click()
t.sleep(5)
#退出
driver.quit()

2.通过name

from selenium import webdriver
import time as t
#指定被测的浏览器并且对webdriver进行实例化
driver=webdriver.Chrome()
#导航到被测的网址
driver.get('http://www.baidu.com/')
#等待三秒
t.sleep(3)
driver.find_element_by_name('wd').send_keys('彭于晏')
t.sleep(3)
driver.find_element_by_id('su').click() #百度一下没有name
t.sleep(5)
#退出
driver.quit()

3.通过class name

from selenium import webdriver
import time as t
#指定被测的浏览器并且对webdriver进行实例化
driver=webdriver.Chrome()
#导航到被测的网址
driver.get('http://www.baidu.com/')
#等待三秒
t.sleep(3)
driver.find_element_by_class_name('s_ipt').send_keys('彭于晏')
t.sleep(3)
driver.find_element_by_class_name('btn self-btn bg s_btn').click()
t.sleep(5) #出现空格和数字都不能执行
#退出
driver.quit()

执行后会结果如下:

/Applications/code/testdev/UI自动化测试/index.py:17: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  driver.find_element_by_class_name('s_ipt').send_keys('彭于晏')
/Applications/code/testdev/UI自动化测试/index.py:19: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  driver.find_element_by_class_name('btn self-btn bg s_btn').click()
Traceback (most recent call last):
  File "/Applications/code/testdev/UI自动化测试/index.py", line 19, in 
    driver.find_element_by_class_name('btn self-btn bg s_btn').click()
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 754, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 1238, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 418, in execute
    self.error_handler.check_response(response)
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 243, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".btn self-btn bg s_btn"}
  (Session info: chrome=96.0.4664.55)
Stacktrace:
0   chromedriver                        0x00000001049ffd48 __gxx_personality_v0 + 548124
1   chromedriver                        0x00000001049947a0 __gxx_personality_v0 + 108404
2   chromedriver                        0x0000000104592b94 chromedriver + 158612
3   chromedriver                        0x00000001045c2704 chromedriver + 354052
4   chromedriver                        0x00000001045eb9f0 chromedriver + 522736
5   chromedriver                        0x00000001045b76a0 chromedriver + 308896
6   chromedriver                        0x00000001049c2920 __gxx_personality_v0 + 297204
7   chromedriver                        0x00000001049d6924 __gxx_personality_v0 + 379128
8   chromedriver                        0x00000001049db798 __gxx_personality_v0 + 399212
9   chromedriver                        0x00000001049d77c8 __gxx_personality_v0 + 382876
10  chromedriver                        0x00000001049b83f0 __gxx_personality_v0 + 254916
11  chromedriver                        0x00000001049f0f78 __gxx_personality_v0 + 487244
12  chromedriver                        0x00000001049f10ec __gxx_personality_v0 + 487616
13  chromedriver                        0x0000000104a06920 __gxx_personality_v0 + 575732
14  libsystem_pthread.dylib             0x000000019e82b878 _pthread_start + 320
15  libsystem_pthread.dylib             0x000000019e8265e0 thread_start + 8

4.通过xpath    name classname id 找不到的情况下用xpath

from selenium import webdriver
import time as t
#指定被测的浏览器并且对webdriver进行实例化
driver=webdriver.Chrome()
#导航到被测的网址
driver.get('http://www.baidu.com/')
#等待三秒
t.sleep(3)
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('彭于晏')
t.sleep(3)
driver.find_element_by_xpath('//*[@id="su"]').click()
t.sleep(5)
#退出
driver.quit()

5.link text" 超连接

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.get('http://www.baidu.com/')
t.sleep(3)
driver.find_element_by_link_text('新闻').click() #精确点击新闻
t.sleep(5)
driver.quit()

6.partial link text" 超连接模糊匹配

from selenium import webdriver
import time as t
driver=webdriver.Chrome()
driver.get('http://www.baidu.com/')
t.sleep(3)
driver.find_element_by_partial_link_text('hao').click()
t.sleep(5)
driver.quit()

8.css selector

from selenium import webdriver
import time as t
#指定被测的浏览器并且对webdriver进行实例化
driver=webdriver.Chrome()
#导航到被测的网址
driver.get('http://www.baidu.com/')
#等待三秒
t.sleep(3)
driver.find_element_by_css_selector('#kw').send_keys('彭于晏')
t.sleep(3)
driver.find_element_by_css_selector('#su').click()
t.sleep(5)
#退出
driver.quit()

8.tag name