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")
提出来,放在统一地方进行管理。