韦奇_UI自动化_定位相关问题和解决方案

定位相关问题和解决方案

'''
ui自动化,定位相关问题,和解决方案
'''

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


class TestElementNoLocate:
    def serup(self):
        self.driver = webdriver.Chrome()

    def teardowm(self):
        self.driver.quit()

    def test_locator_error(self):
        '''
        原因:在element中搜索对应元素,发现没有搜索到
        解决方法:写一个正确的定位
        :return:
        '''
        self.driver.get("https://baidu.com")
        self.driver.find_element(By.ID,'xxxx')

    def test_locate_loading(self):
        '''
        原因:由于页面加载速度过快,元素未加载出来 执行了find element操作
        思路:添加一个强制等待 确定页面加载完成后  在执行find操作
        解决:添加一个隐式等待或者显式等待
        :return:
        '''
        self.driver.get("https://vip.ceshiren.com")
        self.driver.implicitly_wait(5)
        self.driver.find_element(By.XPATH,"//*[text()='个人中心']")

    def test_dynamic_ID(self):
        '''
        原因:由于页面id是动态变化,所以会出现定位不到id 情况
        思路:加强制等待,进行再次定位。会发现id已经变动
        解决:改变定位方法,使用xpath进行定位
        :return:
        '''
        self.driver.get("https://vip.ceshiren.com/#/ui_study")
        self.driver.find_element(By.XPATH,"//*[text()='动态id']")
        # self.driver.find_element(By.ID,"71")

    def test_iframe(self):
        '''
        NoSuchElementException
        原因:有可能是由于iframe
        解决:进行确定iframe后,再次切iframe

        :return:
        '''
        self.driver.get("https://vip.ceshiren.com/#/ui_study")
        iframe_ele = self.driver.find_element(By.CSS_SELECTOR,'.iframe')
        self.driver.switch_to.frame((iframe_ele))
        self.driver.find_element(By.ID,"lianxi").click()

    def test_windows(self):
        '''
        原因:打开新窗口,并且定位的是新窗口里边的元素
        解决:如果定位新窗口元素 需要切换到对应的页面再去定位
        :return:
        '''
        self.driver.get("https://vip.ceshiren.com/#/ui_study")
        self.driver.find_element(By.ID,"openWindows").click()
        windows = self.driver.window_handles
        self.driver.switch_to.window(windows[-1])
        self.driver.find_element(By.ID,"lianxi").click()