selenium元素定位方法介绍(与unittest结合、以csdn为例)

#coding=utf-8
from selenium import webdriver
from HTMLTestRunner import HTMLTestRunner
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import unittest
import time

class element_test(unittest.TestCase):
    """介绍元素定位方法,csdn首页测试。id、name、tag、class、link_text、partial link、xpath、css。
    tag根据标签来定位、xpath根据路径来定位、css是用css选择器来定位(速度快过xpath)"""
    @classmethod
    def setUpClass(cls) -> None:
        cls.browser = webdriver.Chrome()
        cls.url = "https://www.csdn.net/"
        cls.browser.get(cls.url)

    @unittest.skip("跳过测试")
    def test_id(self):
        """id、class、xpath定位
        xpath:1.绝对路径(/html/body/..),2.//input表示input标签,3.//*表示任意标签,4.[@id=xx]表示元素属性值,5.div[2]表示第二个div标签
        6.逻辑运算[@id=xx and @class=xx],7.包含[contains(@id,'xx')],8.text文本[text(),'xx']"""
        search_window = self.browser.current_window_handle
        search = self.browser.find_element_by_id("toolber-keyword")         #用id进行定位元素
        search.clear()
        search.send_keys("Theahe")
        self.browser.find_element_by_xpath('//*[@id="nav-left-menu"]/div/a').click()    #用xpath进行定位元素,直接用谷歌开发者工具copy XPath就可找到路径
        self.browser.implicitly_wait(5)     #隐式等待
        current_window = self.browser.window_handles     #当前所有窗口的句柄
        #time.sleep(3)
        self.browser.switch_to.window(search_window)      #切换窗口到首页
        self.browser.find_element_by_class_name("toolbar_to_feed").click()   #用classname定位

    @unittest.skip("跳过测试")
    def test_link(self):
        """link_test链接的文本,partial_link_text是部分链接文本(相当于模糊查询)"""
        self.browser.maximize_window()      #控制浏览器大小,全屏展示
        self.browser.find_element_by_link_text("首页").click()     #点击首页
        self.browser.find_element_by_partial_link_text("坛").click()    #点击论坛


    def test_css(self):
        """css定位:.class,#id,*所有元素,p标签,>层级关系,+ 同级下一个标签,[]属性定位
        [id *= xx]id包含xx的元素,[id ^= xx]以xx开头的,[id $= xx]以xx结尾,p:nth-child(2)第二个p标签"""
        self.browser.find_element_by_css_selector('.active').click()      #class是active
        self.browser.find_element_by_css_selector("[title='下载']").click()       #属性值
        blogClick = self.browser.find_element_by_css_selector("#blogClick")      #id是blogClick
        ActionChains(self.browser).move_to_element(blogClick).perform()         #鼠标悬停
        write = WebDriverWait(self.browser,5,0.5).until(ec.visibility_of_element_located((By.CSS_SELECTOR,'div#writeGuide > a')))     #判断页面元素是否存在
        #用谷歌开发者工具copy selector就可找到路径
        write.click()


    @classmethod
    def tearDownClass(cls) -> None:
    	#quit关闭所有窗口退出程序,close关闭当前窗口(当打开多个窗口时用来关闭当前窗口)
        cls.browser.quit()

if __name__ == '__main__':
    unittest.main()
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页