定位相关问题和解决方案
'''
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()