Python+Selenium框架版- 进一步实现POM和可能遇到问题解决方法
Posted 给自己一个向前进的理由
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python+Selenium框架版- 进一步实现POM和可能遇到问题解决方法相关的知识,希望对你有一定的参考价值。
目标:实现三个页面,两个测试脚本。
练习场景:新建了2个页面对象:百度新闻首页,百度体育新闻首页,具体文件结构如下图,其他和之前项目层级结构保持不变。
1.百度首页页面类代码(baidu_homepage.py),定义了百度新闻的入口
from framework.base_page import BasePage class HomePage(BasePage): input_box = "id=>" search_submit_btn = "xpath=>//*[@id=\'su\']" # 百度新闻入口 news_link = "xpath=>//*[@id=\'u1\']/a[@name=\'tj_trnews\']" def type_search(self,text): self.type(self.input_box,text) def send_submit_btn(self): self.click(self.search_submit_btn) def click_news(self): self.click(self.news_link) self.sleep(2)
2.百度新闻首页的页面类代码(baidu_news_home.py),定义了体育新闻入口
from framework.base_page import BasePage class NewsHomePage(BasePage): # 点击体育新闻入口 sport_link = "xpath=>//*[@id=\'channel-all\']/div/ul/li[7]/a[@href=\'/sports\']" def click_sports(self): self.click(self.sport_link) self.sleep(2)
3.百度体育新闻页面类代码(news_sports_home.py)
from framework.base_page import BasePage class SportNewsHomePage(BasePage): # NBA 第一条新闻 nba_link = "xpath=>//*[@id=\'col_nba\']/div[1]/div[2]/ul[1]/li[1]/a" def click_nba_link(self): self.click(self.nba_link) self.sleep(2)
4.测试类代码(test_nba_news_view.py)
import time import unittest from framework.browser_engine import BrowserEngine from pageobjects.baidu_homepage import HomePage from pageobjects.baidu_news_home import NewsHomePage from pageobjects.news_sport_home import SportNewsHomePage class ViewNBANews(unittest.TestCase): def setUp(self): browse = BrowserEngine(self) self.driver = browse.open_browser(self) def tearDown(self): self.driver.quit() def test_view_nba_views(self): # 初始化百度首页,并点击新闻链接 baiduhome = HomePage(self.driver) baiduhome.click_news() # 初始化一个百度新闻主页对象,点击体育 newshome = NewsHomePage(self.driver) newshome.click_sports() # 初始化一个体育新闻主页,点击NBA sportnewhome = SportNewsHomePage(self.driver) sportnewhome.click_nba_link() sportnewhome.get_window_img() if __name__ == \'__main__\': unittest.main()
按照博主的会出现报错:
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
其实,该报错是源于base_page.py里面的,注释掉就能跑下去了。
def click(self,selector): """ 点击元素 :param selector: :return: """ el = self.find_element(selector) try: el.click() #logger.info("The element \\\' %s \\\' was clicked." %el.text) #这一句错了 #错在点击“新闻”后的记录日志,日志中传的参数是“新闻”元素的text属性值。 #我理解此时点击了新闻后页面切换到新闻页面了,所以找不到“新闻”元素了。 except NameError as e: logger.error("Fail to click the element with %s" %e)
参考文章:https://blog.csdn.net/u011541946/article/details/70375555
以上是关于Python+Selenium框架版- 进一步实现POM和可能遇到问题解决方法的主要内容,如果未能解决你的问题,请参考以下文章
免费送书 | python版《Selenium WebDriver 3.0 自动化测试框架实战指南》
Python+selenium+unittest的GUI自动化框架实现
Python+Selenium框架设计篇之4-框架内封装基类和实现POM
《一头扎进》系列之Python+Selenium框架设计篇3- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了