Selenium元素定位

一、selenium元素定位常用方法

要想Selenium操作元素,需要告知Selenium如何去定位元素来模拟用户动作。比如,百度搜索,此时得告诉它,先要找到搜索框和搜索按钮,然后输入搜索内容,然后点击搜索,最后展示搜索结果。

常用的定位方法有如下方法:

这里以百度搜索为例,通过不通的定位方式进行百度搜索。

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestBaidu:
    def setup(self):
        self.url = "https://www.baidu.com/"
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get(self.url)
        self.driver.implicitly_wait(5)

    def teardown(self):
        sleep(2)
        self.driver.quit()

    def test_locator_by_id(self):
        """ID定位"""
        self.driver.find_element_by_id("kw").send_keys("linux")
        self.driver.find_element_by_id("su").click()

    def test_locator_by_name(self):
        """NAME定位"""
        self.driver.find_element_by_name("wd").send_keys("linux")

    def test_locator_by_xpath(self):
        """XPATH定位"""
        # self.driver.find_element_by_xpath("//*[@id='kw']").send_keys("linux")
        # self.driver.find_element_by_xpath("//*[@name='wd']").send_keys("linux")
        self.driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys("linux")

    def test_locator_by_link_text(self):
        """链接文本定位"""
        self.driver.find_element_by_link_text("新闻").click()

    def test_locator_by_partial_link_text(self):
        """部分链接文本定位"""
        self.driver.find_element_by_partial_link_text("hao").click()

    def test_locator_by_tag(self):
        """tag标签定位"""
        element=self.driver.find_element_by_tag_name("input")
        print(element.tag_name)

二、find_element定位

find_element()方法用于定位元素,它需要传入两个参数,第一个参数是定位的类型,由By模块提供(使用前需要通过from selenium.webdriver.common.by import By导入By模块),第二个参数是具体定位的方式。

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestBaidu:

    def test_locator_by_find_element(self):
        # self.driver.find_element(By.NAME,"wd").send_keys("selenium") #NAME定位
        # self.driver.find_element(By.ID,"su").click() #ID定位

        # self.driver.find_element(By.LINK_TEXT,"新闻").click()
        self.driver.find_element(By.PARTIAL_LINK_TEXT,"123").click()

后面会采用数据分离的方式将定位元素分开,此时会采用下列写法:

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

class TestBaidu:

	input_locator = (By.NAME,"wd")
	
    def test_locator_by_find_element(self):
        self.driver.find_element(*input_locator)

后面会将input_locator = (By.NAME,"wd")提出来,放在统一地方进行管理。

三、附件

1、练习网站:https://www.selenium.dev/selenium/web/

posted @ 2021-01-10 18:02  xyztank  阅读(90)  评论(0编辑  收藏  举报