# def sendKey、def elementclick呼叫 def getElement對定位元素型別判斷失敗。
設想:click元素是xpth型別,呼叫 def getElement后,如果loactorType不是“id”的話,可以進入getByType進行判定,并成功讀取相關元素定位資訊
結果:呼叫 def getElement后,如果loactorType不是“id”的話,好像并沒有進入getByType進行判定,導致報錯提醒“selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]"}”
原代碼BasePage.py
from selenium.webdriver.common.by import By
from traceback import print_stack
class BasePage():
def __init__(self,driver):
self.driver = driver
def getByType(self,loactorType):
#統一小寫
loactorType = loactorType.lower()
if loactorType == "id":
return By.ID
elif loactorType == "name":
return By.NAME
elif loactorType == "xpath":
return By.XPATH
elif loactorType == "class":
return By.CLASS_NAME
elif loactorType == "css":
return By.CSS_SELECTOR
elif loactorType == "linktext":
return By.LINK_TEXT
else:
print("元素型別:"+loactorType+"不存在")
return False
def getElement(self,locator,locatorType = "id"):
element = None
try:
locatorType = locatorType.lower()
byType = self.getByType(locatorType)
element = self.driver.find_element(byType,locator)
print("元素找到succss")
except:
print("元素尋找失敗")
return element
def sendKey(self, data,locator, locatorType = "id"):
try:
# byType = self.getByType(locatorType)
element = self.getElement(locator,locatorType)
element.send_keys(data)
print("資料發送成功")
except:
print("資料發送失敗")
print_stack()
def elementclick(self,locator,locatorType = "id" ):
try:
# byType = self.getByType(locatorType)
element = self.getElement(locator,locatorType)
element.click()
print("元素點擊succss")
except:
print("元素"+locator+"點擊失敗")
print_stack()
相關原代碼:test_login.py
from selenium import webdriver
from selenium.webdriver.common.by import By
from page.login_page import LoginPage
import unittest
import time
class LoginTest(unittest.TestCase):
def test_login(self):
URL = 'https://www.douban.com/'
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(20)
driver.get(URL)
#進入iframe里面的盒子
driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="anony-reg-new"]/div/div[1]/iframe'))
#切換到“賬號密碼登錄”
qf = driver.find_element(By.XPATH,'/html/body/div[1]/div[1]/ul[1]/li[2]')
qf.click()
lp = LoginPage(driver)
lp.login('xxxxx','123456')
driver.switch_to.default_content()
username = driver.find_element(By.XPATH,'//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]')
if username is not None:
print("login successful")
else:
print('login failed')
driver.quit()
相關原代碼:login_page.py
from selenium.webdriver.common.by import By
from page.BasePage import BasePage
class LoginPage(BasePage):
def __init__(self,driver):
super().__init__(driver)
self.driver = driver
#定位元素
# _iframebox = '//*[@id="anony-reg-new"]/div/div[1]/iframe'
# _loginqf = '//*[@id="anony-reg-new"]/div/div[1]/iframe'
_user_name = 'username'
_password_pd = 'password'
_login_bt = '/html/body/div[1]/div[2]/div[1]/div[5]/a'
def enternumber(self, number):
self.sendKey(number,self._user_name)
def enterpasswd(self, passwd):
self.sendKey(passwd,self._password_pd)
def clickbt(self):
self.elementclick(self._login_bt)
def login(self,number,passwd):
self.enternumber(number)
self.enterpasswd(passwd)
self.clickbt()
uj5u.com熱心網友回復:
菜鳥一枚,求問轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/51292.html
上一篇:IFS實作分形樹
