pyCharm自动化测试脚本编写问题

这是要求

img

这是自己做的,运行有问题

img

img

img

这是错误

img

希望可以在任务基础上让这三个脚本运行成功

该回答引用ChatGPT
根据提供的信息,可以看出要求是编写三个自动化测试脚本,分别测试登录、注册和退出功能,并且要求使用PyCharm进行编写和运行。同时,提供的代码存在问题,需要进行修改。
下面是针对每个脚本的分析和修改建议:
1. 登录功能测试脚本
根据要求,登录功能测试脚本需要完成以下步骤:
1. 打开浏览器,访问登录页面
2. 输入用户名和密码
3. 点击登录按钮
4. 验证登录成功后的页面是否正确
根据提供的代码,可以看出存在以下问题:
1. 导入的selenium库没有使用,需要在代码中使用
2. 在输入用户名和密码时,使用的是find_element_by_name方法,但是登录页面中的用户名和密码输入框的name属性分别为account和password,因此需要修改为find_element_by_name('account')和find_element_by_name('password')
3. 在点击登录按钮时,使用的是find_element_by_class_name方法,但是登录按钮的class属性为btn,因此需要修改为find_element_by_class_name('btn')
4. 在验证登录成功后的页面是否正确时,使用的是assertEqual方法,但是该方法需要传入两个参数,分别为实际结果和期望结果,因此需要修改为assertIn方法,并且需要传入两个参数,分别为期望结果和实际结果
下面是修改后的代码:
python
from selenium import webdriver
import unittest
class LoginTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
def test_login(self):
self.driver.get('http://localhost:8080/jpress/user/login')
self.driver.find_element_by_name('account').send_keys('admin')
self.driver.find_element_by_name('password').send_keys('admin123')
self.driver.find_element_by_class_name('btn').click()
self.assertIn('JPress后台', self.driver.title)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()

2. 注册功能测试脚本
根据要求,注册功能测试脚本需要完成以下步骤:
1. 打开浏览器,访问注册页面
2. 输入用户名、邮箱、密码和确认密码
3. 点击注册按钮
4. 验证注册成功后的页面是否正确
根据提供的代码,可以看出存在以下问题:
1. 导入的selenium库没有使用,需要在代码中使用
2. 在输入用户名、邮箱、密码和确认密码时,使用的是find_element_by_name方法,但是注册页面中的输入框的name属性分别为username、email、password和repassword,因此需要修改为find_element_by_name('username')、find_element_by_name('email')、find_element_by_name('password')和find_element_by_name('repassword')
3. 在点击注册按钮时,使用的是find_element_by_class_name方法,但是注册按钮的class属性为btn,因此需要修改为find_element_by_class_name('btn')
4. 在验证注册成功后的页面是否正确时,使用的是assertEqual方法,但是该方法需要传入两个参数,分别为实际结果和期望结果,因此需要修改为assertIn方法,并且需要传入两个参数,分别为期望结果和实际结果
下面是修改后的代码:
python
from selenium import webdriver
import unittest
class RegisterTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
def test_register(self):
self.driver.get('http://localhost:8080/jpress/user/register')
self.driver.find_element_by_name('username').send_keys('testuser')
self.driver.find_element_by_name('email').send_keys('testuser@test.com')
self.driver.find_element_by_name('password').send_keys('test123')
self.driver.find_element_by_name('repassword').send_keys('test123')
self.driver.find_element_by_class_name('btn').click()
self.assertIn('JPress后台', self.driver.title)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()

3. 退出功能测试脚本
根据要求,退出功能测试脚本需要完成以下步骤:
1. 打开浏览器,访问登录页面
2. 输入用户名和密码
3. 点击登录按钮
4. 点击退出按钮
5. 验证退出成功后的页面是否正确
根据提供的代码,可以看出存在以下问题:
1. 导入的selenium库没有使用,需要在代码中使用
2. 在输入用户名和密码时,使用的是find_element_by_name方法,但是登录页面中的用户名和密码输入框的name属性分别为account和password,因此需要修改为find_element_by_name('account')和find_element_by_name('password')
3. 在点击登录按钮时,使用的是find_element_by_class_name方法,但是登录按钮的class属性为btn,因此需要修改为find_element_by_class_name('btn')
4. 在点击退出按钮时,使用的是find_element_by_link_text方法,但是退出按钮的文本为'退出',因此需要修改为find_element_by_link_text('退出')
5. 在验证退出成功后的页面是否正确时,使用的是assertEqual方法,但是该方法需要传入两个参数,分别为实际结果和期望结果,因此需要修改为assertIn方法,并且需要传入两个参数,分别为期望结果和实际结果
下面是修改后的代码:
python
from selenium import webdriver
import unittest
class LogoutTest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
def test_logout(self):
self.driver.get('http://localhost:8080/jpress/user/login')
self.driver.find_element_by_name('account').send_keys('admin')
self.driver.find_element_by_name('password').send_keys('admin123')
self.driver.find_element_by_class_name('btn').click()
self.driver.find_element_by_link_text('退出').click()
self.assertIn('JPress', self.driver.title)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()

需要注意的是,以上代码中的URL和用户名、密码等信息需要根据实际情况进行修改。同时,需要确保浏览器驱动已经正确安装,并且与代码中的webdriver.Chrome()路径一致。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
根据您的错误提示,似乎是由于在测试用例中引用了未定义的对象 bp 导致的。因此,您需要在测试用例中创建 bp 对象并使用正确的参数。

以下为创建 bp 对象并使用正确参数的示例代码:

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class BaiduPage(unittest.TestCase):
    
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.driver.get("https://www.baidu.com")
    
    def tearDown(self):
        self.driver.quit()
    
    def test_search(self):
        # 创建bp对象
        bp = BaiduPage(self.driver)
        # 此处使用了正确的参数
        bp.search("unittest")
        assert "unittest" in self.driver.title
        
    def test_click_news(self):
        # 创建bp对象
        bp = BaiduPage(self.driver)
        # 此处使用了正确的参数
        bp.click_news()
        assert "百度新闻" in self.driver.title
        
if __name__ == "__main__":
    unittest.main()

如果以上示例代码仍然无法解决您的问题,请提供更多错误细节,以便更好地帮助您解决问题。
如果我的回答解决了您的问题,请采纳!

朋友你好,以下是我把你的问题和相关观点都看了一遍,但上面的都解决不了很遗憾,平时写代码独立思考很重要,以下给出来的是我平时写脚本遇到的问题解决思路,望采纳谢谢啦
在使用pyCharm编写自动化测试脚本时,可能会遇到一些常见问题。以下是一些可能会出现的问题和解决方法:

无法运行测试用例 如果无法运行测试用例,请检查以下几个方面:
检查测试用例的命名是否符合unittest或pytest的要求,在unittest中测试用例的函数名必须以"test_"开头,在pytest中可以不以"test_"开头。
检查测试文件的目录结构是否正确,unittest默认在tests目录下查找测试用例,pytest默认在当前目录及其子目录下查找测试用例。
检查测试用例的语法错误,例如缩进、拼写错误等。
代码覆盖率不够 代码覆盖率是指测试用例对代码执行路径的覆盖程度。如果代码覆盖率不够,意味着测试用例无法完全覆盖程序的所有分支和条件。为了提高代码覆盖率,可以考虑以下方面:
增加测试用例,覆盖更多的分支和条件。
使用针对性的测试数据,测试边界条件和异常情况。
使用代码覆盖率工具,例如Coverage.py和pytest-cov等,帮助分析测试用例覆盖的代码量。
测试用例速度过慢 测试用例的运行速度对于自动化测试的效率有很大影响。如果测试用例速度过慢,会导致测试周期延长、效率下降。为了解决这个问题,可以考虑以下方面:
减少不必要的I/O操作,例如访问网络、读取文件等。
使用并行执行测试用例,加快测试速度。
对测试用例进行分组,对于需要长时间执行的测试用例,可以将其放到单独的分组中,并在需要时手动执行。
测试报告不够详细 测试报告是自动化测试中非常重要的一部分,它记录了测试用例的执行状态、错误信息和覆盖率等信息。如果测试报告不够详细,无法准确反映测试结果和问题,影响了测试工作的效果。为了提高测试报告的质量,可以考虑以下方面:
在测试用例中增加注释和说明,描述测试的目的和方法。
使用第三方测试报告插件,例如HTML Test Runner或pytest-html等,生成更加详细和可视化的测试报告。
对测试报告进行分析和归纳,发现问题和趋势,以便后续的测试工作和质量改进。