当前位置:   article > 正文

用Chat GPT学习pythonwebUI自动化_gpt实现ui自动化

gpt实现ui自动化

一、使用背景


之前写过java+selenium的web UI自动化,使用的selenium是偏老版本的,另外python初学,还不会使用。但在java编写的经历中,有几个概念:
1、需要使用测试框架,对测试用例进行生命周期管理,例如用例的执行,运行的先后顺序依赖关系之类。java的testNG比较强大,类似的测试框架,python的初步调研,决定使用pytest。
2、需要使用PageObject模式,能对变动频繁的元素定位剥离出来。

基于以上2个述求,一个方案是自己摸索来写、另一种是在网上找一个成熟的工程来学习。

困难点:
1、自己摸索,需要先自我科普一下pytest的知识,发现功能很强大,且很灵活,一下子记不住也看不完所有的功能。于是先挑选了最基本的语法,fixture是干什么的。

2、找到一个成熟的工程来学习,很全面,但是试着运行了一下,有很多跑不通,一时间需要各种定位,比较花时间,且有点焦头烂额。
 

二、使用chatgpt辅助学习


使用AI打辅助,是一个中间状态,通过AI给一个渐进的完整代码块,减少成熟工程中太多东西一时半解带来的耗时,可以提高学习的效率。

首先,最小业务单元

使用python和selenium写个登录脚本

  1. from selenium import webdriver
  2. browser = webdriver.Chrome()
  3. browser.get('https://www.baidu.com')
  4. browser.find_element("id", "kw").send_keys("哈哈")

其次,加入pytest

这个时候请教一下chatgpt,给它输入prompt:

使用pytest,python语言编写https://www.baidu.com/ 页面的登录webUI脚本

 

如下是代码全文:

  1. import pytest
  2. from selenium import webdriver
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.webdriver.common.by import By
  5. from selenium.webdriver.support.ui import WebDriverWait
  6. from selenium.webdriver.support import expected_conditions as EC
  7. @pytest.fixture(scope="module")
  8. def browser():
  9. driver = webdriver.Chrome()
  10. yield driver
  11. driver.quit()
  12. def test_baidu_login(browser):
  13. browser.get("https://www.baidu.com/")
  14. login_button = WebDriverWait(browser, 10).until(
  15. EC.element_to_be_clickable((By.XPATH, '//*[@id="s-top-loginbtn"]'))
  16. )
  17. login_button.click()
  18. username_input = WebDriverWait(browser, 10).until(
  19. EC.presence_of_element_located((By.XPATH, '//*[@id="TANGRAM__PSP_10__userName"]'))
  20. )
  21. password_input = WebDriverWait(browser, 10).until(
  22. EC.presence_of_element_located((By.XPATH, '//*[@id="TANGRAM__PSP_10__password"]'))
  23. )
  24. # Replace with your actual username and password
  25. username_input.send_keys("your_username")
  26. password_input.send_keys("your_password")
  27. submit_button = WebDriverWait(browser, 10).until(
  28. EC.element_to_be_clickable((By.XPATH, '//*[@id="TANGRAM__PSP_10__submit"]'))
  29. )
  30. submit_button.click()
  31. # Add assertions to verify the login was successful

最后,基于上下文再加入pageObject

再次请教chatgpt,给它输入prompt:
以上代码,需要考虑使用page object模式,该怎么优化

这点比较让人惊讶,可以如此自然地理解中文的且偏自然语言的上下文,amazing!!

  1. import pytest
  2. from selenium import webdriver
  3. from selenium.webdriver.common.by import By
  4. from selenium.webdriver.support.ui import WebDriverWait
  5. from selenium.webdriver.support import expected_conditions as EC
  6. class LoginPage:
  7. def __init__(self, driver):
  8. self.driver = driver
  9. self.username_input = (By.XPATH, '//*[@id="TANGRAM__PSP_10__userName"]')
  10. self.password_input = (By.XPATH, '//*[@id="TANGRAM__PSP_10__password"]')
  11. self.submit_button = (By.XPATH, '//*[@id="TANGRAM__PSP_10__submit"]')
  12. def login(self, username, password):
  13. username_input = WebDriverWait(self.driver, 10).until(
  14. EC.presence_of_element_located(self.username_input)
  15. )
  16. password_input = WebDriverWait(self.driver, 10).until(
  17. EC.presence_of_element_located(self.password_input)
  18. )
  19. submit_button = WebDriverWait(self.driver, 10).until(
  20. EC.element_to_be_clickable(self.submit_button)
  21. )
  22. username_input.send_keys(username)
  23. password_input.send_keys(password)
  24. submit_button.click()
  25. class HomePage:
  26. def __init__(self, driver):
  27. self.driver = driver
  28. self.login_button = (By.XPATH, '//*[@id="s-top-loginbtn"]')
  29. def go_to_login_page(self):
  30. login_button = WebDriverWait(self.driver, 10).until(
  31. EC.element_to_be_clickable(self.login_button)
  32. )
  33. login_button.click()
  34. return LoginPage(self.driver)
  35. @pytest.fixture(scope="module")
  36. def browser():
  37. driver = webdriver.Chrome()
  38. yield driver
  39. driver.quit()
  40. def test_baidu_login(browser):
  41. browser.get("https://www.baidu.com/")
  42. home_page = HomePage(browser)
  43. login_page = home_page.go_to_login_page()
  44. login_page.login("your_username", "your_password")
  45. # Add assertions to verify the login was successful

三、总结

感受最深的是,通过chatgpt输入时,尽量给出多组合的信息,可以少走了一些弯路。若通过百度搜索,查到的可能是一些较老的信息,对新学的同学非常不利,例如很多demo代码里给出的selenium 元素定位语法还是老的,而我用的是selenium较新的4.9.1,已经没有find_element_by_id()这种定位方式了,别问我怎么知道,问就是踩到了坑。

以上的渐进式学习,让我逐步掌握了pytest和pageObeject模式的第一步,清晰明了,后续我就可以在这个基础上,自己往上添加我的业务脚本了,nice job!

更多技术文章、学习资料、笔记、文档、问答请关注 公众号:软件测试小dao

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号