第一步,简单交流
输入:请使用selenium书写百度查询的测试代码。
输出:
——————————————————————————————
好的,以下是使用Python和Selenium进行百度搜索的测试代码示例:
from selenium import webdriver
# 创建一个Chrome
WebDriver
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com")
# 在搜索框中输入关键字
search_box =
driver.find_element_by_name("wd")
search_box.send_keys("Selenium")
# 点击搜索按钮
search_box.submit()
# 检查搜索结果是否包含期待的关键字
assert "Selenium" in driver.title
# 关闭浏览器
driver.quit()
该代码模拟了在百度首页中搜索关键字"Selenium"并检查结果页面是否包含该关键字。您可以将其作为参考,根据自己的需求进行修改。
——————————————————————————————
解析:
运行
使用driver.find_element(By.NAME,"wd")函数改写代码。
from selenium import webdriver
from selenium.webdriver.common.by import
By
# 创建一个Chrome WebDriver
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com")
# 在搜索框中输入关键字
search_box =
driver.find_element(By.NAME,"wd")
search_box.send_keys("Selenium")
# 点击搜索按钮
search_box.submit()
# 检查搜索结果是否包含期待的关键字
assert "Selenium" in driver.title
# 关闭浏览器
driver.quit()
使用显示等待改写
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait
import WebDriverWait
# 创建一个Chrome
WebDriver
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com")
# 在搜索框中输入关键字
search_box =
driver.find_element(By.NAME,"wd")
search_box.send_keys("Selenium")
# 点击搜索按钮
search_box.submit()
WebDriverWait(driver, 20).until(lambda
driver:driver.title.startswith("Selenium"))
# 检查搜索结果是否包含期待的关键字
assert "Selenium" in driver.title
# 关闭浏览器
driver.quit()
第二步,告知selenium版本
提示:请使用selenium4.8.3版本书写百度查询的测试代码
输出:
好的,以下是使用Selenium 4.0.0版本实现在百度搜索框中输入关键词并点击搜索的Python代码示例:
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import
Keys
from selenium.webdriver.chrome.service
import Service
# 设置Chrome浏览器启动路径
chrome_path = '/usr/local/bin/chromedriver'
# 创建Chrome浏览器服务
service = Service(executable_path=chrome_path)
# 启动浏览器
browser = Chrome(service=service)
# 打开百度首页
browser.get("https://www.baidu.com/")
# 找到搜索框,输入关键词并按回车键
search_input =
browser.find_element(By.NAME, 'wd')
search_input.send_keys('Selenium')
search_input.send_keys(Keys.ENTER)
# 关闭浏览器
browser.quit()
该代码假设你已经安装了Selenium 4.0.0,Chrome webdriver也已经下载并安装到指定的目录下。你需要根据自己的实际情况修改chrome_path变量的值来指定Chrome webdriver的路径。
改写chrome_path = '/usr/local/bin/chromedriver'为chrome_path = 'C:\\Lib\\chromedriver.exe'
运行,直接通过。
第三步,告知测试框架unittest
提示:请使用selenium4.8.3版本+unittest框架书写百度查询的测试代码。
输出:
好的,以下是使用Selenium 4.0.0版本和unittest框架实现在百度搜索框中输入关键词并点击搜索的Python代码示例:
import unittest
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import
Keys
from selenium.webdriver.chrome.service
import Service
class TestBaiduSearch(unittest.TestCase):
def setUp(self):
# 设置Chrome浏览器启动路径
chrome_path = '/usr/local/bin/chromedriver'
# 创建Chrome浏览器服务
self.service = Service(executable_path=chrome_path)
# 启动浏览器
self.browser = Chrome(service=self.service)
def test_baidu_search(self):
# 打开百度首页
self.browser.get('https://www.baidu.com')
# 找到搜索框,输入关键词并按回车键
search_input = self.browser.find_element(By.NAME, 'wd')
search_input.send_keys('Selenium')
search_input.send_keys(Keys.ENTER)
# 等待页面加载完成
self.browser.implicitly_wait(10)
# 断言搜索结果页面标题是否包含“Selenium”
self.assertIn('Selenium', self.browser.title)
def tearDown(self):
# 关闭浏览器
self.browser.quit()
if __name__ == '__main__':unittest.main()
该代码假设你已经安装了Selenium 4.0.0,Chrome webdriver也已经下载并安装到指定的目录下。你需要根据实际情况修改chrome_path变量的值来指定Chrome webdriver的路径。在运行代码前,请确保你已经安装了unittest框架,并运行该脚本即可执行测试。
改写chrome_path = '/usr/local/bin/chromedriver'为chrome_path = 'C:\\Lib\\chromedriver.exe'
运行,
改写self.browser.implicitly_wait(10)为显示断言
import unittest
from selenium.webdriver import Chrome
from selenium.webdriver.com
mon.by import By
from selenium.webdriver.common.keys import
Keys
from selenium.webdriver.chrome.service
import Service
from selenium.webdriver.support.wait
import WebDriverWait
class TestBaiduSearch(unittest.TestCase):
def setUp(self):
# 设置Chrome浏览器启动路径
chrome_path = 'C:\\Lib\\chromedriver.exe'
# 创建Chrome浏览器服务
self.service = Service(executable_path=chrome_path)
# 启动浏览器
self.browser = Chrome(service=self.service)
def test_baidu_search(self):
# 打开百度首页
self.browser.get('https://www.baidu.com')
# 找到搜索框,输入关键词并按回车键
search_input = self.browser.find_element(By.NAME, 'wd')
search_input.send_keys('Selenium')search_input.send_keys(Keys.ENTER)
# 等待页面加载完成
WebDriverWait(self.browser, 20).until(lambda driver:
self.browser.title.startswith('Selenium'))
# 断言搜索结果页面标题是否包含“Selenium”
self.assertIn('Selenium', self.browser.title)
def tearDown(self):
# 关闭浏览器
self.browser.quit()
if __name__ == '__main__':unittest.main()
第四步,告知测试中使用显示等待
提示:请使用selenium4.8.3版本+unittest框架书写百度查询的测试代码。代码中使用显示等待。
输出:
好的,以下是使用Selenium 4.0.0版本和unittest框架以及显示等待实现在百度搜索框中输入关键词并点击搜索的Python代码示例:
import unittest
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import
Keys
from selenium.webdriver.chrome.service
import Service
from selenium.webdriver.support.ui import
WebDriverWait
from selenium.webdriver.support import
expected_conditions as EC
class TestBaiduSearch(unittest.TestCase):
def setUp(self):
# 设置Chrome浏览器启动路径
chrome_path = '/usr/local/bin/chromedriver'
# 创建Chrome浏览器服务
self.service = Service(executable_path=chrome_path)
# 启动浏览器
self.browser = Chrome(service=self.service)
def test_baidu_search(self):
# 打开百度首页
self.browser.get('https://www.baidu.com')
# 找到搜索框,输入关键词并按回车键
search_input = self.browser.find_element(By.NAME, 'wd')
search_input.send_keys('Selenium')
search_input.send_keys(Keys.ENTER)
# 等待搜索结果页面加载完成
WebDriverWait(self.browser, 10).until(EC.title_contains('Selenium'))
# 断言搜索结果页面标题是否包含“Selenium”
self.assertIn('Selenium', self.browser.title)
def tearDown(self):
# 关闭浏览器
self.browser.quit()
if __name__ == '__main__':unittest.main()
该代码假设你已经安装了Selenium 4.0.0,Chrome webdriver也已经下载并安装到指定的目录下。你需要根据实际情况修改chrome_path变量的值来指定Chrome webdriver的路径。在运行代码前,请确保你已经安装了unittest框架,并运行该脚本即可执行测试。在代码中,我们使用了显示等待函数WebDriverWait和expected_conditions模块来等待搜索结果页面加载完成。
竟然不该chrome_path = '/usr/local/bin/chromedriver',测试马上通过。困惑
第五步,告知测试框架pytest,并且可以用allure显示。
提示:请使用selenium4.8.3版本+pytest框架书写百度查询的测试代码。代码中使用显示等待。并且支持allure报表
输出:
——————————————————————————————
好的,以下是使用Selenium 4.0.0版本和pytest框架以及显示等待和allure报表实现在百度搜索框中输入关键词并点击搜索的Python代码示例:
import pytest
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import
Keys
from selenium.webdriver.chrome.service
import Service
from selenium.webdriver.support.ui import
WebDriverWait
from selenium.webdriver.support import
expected_conditions as EC
import allure
@allure.feature("百度搜索测试")
class TestBaiduSearch:
def setup_class(self):
# 设置Chrome浏览器启动路径
chrome_path = '/usr/local/bin/chromedriver'
# 创建Chrome浏览器服务
self.service = Service(executable_path=chrome_path)
# 启动浏览器
self.browser = Chrome(service=self.service)
def teardown_class(self):
# 关闭浏览器
self.browser.quit()
@allure.story("搜索Selenium")
@pytest.mark.parametrize("keyword", ["Selenium"])
def test_baidu_search(self, keyword):
# 打开百度首页
self.browser.get('https://www.baidu.com')
# 找到搜索框,输入关键词并按回车键
search_input = self.browser.find_element(By.NAME, 'wd')
search_input.send_keys(keyword)
search_input.send_keys(Keys.ENTER)
# 等待搜索结果页面加载完成
WebDriverWait(self.browser, 10).until(EC.title_contains(keyword))
# 断言搜索结果页面标题是否包含关键词
assert keyword in self.browser.title
if __name__ == '__main__':pytest.main(['-s', '-v', '--alluredir', 'allure-results'])
该代码假设你已经安装了Selenium 4.0.0,Chrome webdriver也已经下载并安装到指定的目录下。在运行代码前,请确保你已经安装了pytest、pytest-allure和allure框架,并执行pytest.main函数即可自动生成并打开allure报表。在代码中,我们使用了pytest框架的装饰器来使用allure报表,使用了pytest.mark.parametrize装饰器来传入参数化数据,使用了显示等待函数WebDriverWait和expected_conditions模块来等待搜索结果页面加载完成。
运行:
C:\Users\xiang\Desktop>pytest -sv -q
test.py --alluredir ./report/xml
================== test session starts
==================
platform win32 -- Python 3.11.3,
pytest-7.3.1, pluggy-1.0.0
rootdir: C:\Users\xiang\Desktop
plugins: allure-pytest-2.13.1,
asyncio-0.21.0, base-url-2.0.0, forked-1.6.0, html-2.0.1, metadata-2.0.4,
ordering-0.6, playwright-0.3.2, rerunfailures-11.1.2, xdist-3.2.1
asyncio: mode=Mode.STRICT
collected 1 item
test.py
DevTools listening on
ws://127.0.0.1:60078/devtools/browser/cf89ed0a-3772-4627-a2e4-789b6f0cc71d
.
================== 1 passed in 7.35s
==================
C:\Users\xiang\Desktop>allure serve
.\report\xml\
Generating report to temp directory...
Report successfully generated to
C:\Users\xiang\AppData\Local\Temp\14817476411006266871\allure-report
Starting web server...
2023-06-12 16:33:29.148:INFO::main: Logging
initialized @2133ms to org.eclipse.jetty.util.log.StdErrLog
Server started at <http://169.254.219.26:60228/>.
Press <Ctrl+C> to exit
第六步,查询unit是否支持allure。
提示:unittest可以使用allure吗
输出:可以的,虽然allure是由pytest框架发起的开源测试报告框架,但是allure的report和pytest嵌入到了unittest框架里面,通过一些途径也是可以使用的。其中,需要依赖allure-python-commons和allure-python-commons两个库来生成allure报表。
使用allure和unittest可以将测试结果更加友好清晰地展示,包括用例标题、测试步骤、测试数据、测试结果、异常信息、截图等。同时还有“统计面板”和“测试历史记录”等功能增强体验,详见allure官网。
以下是一个使用unittest和allure结合的示例代码:
import unittest
import allure
@allure.feature("数值比较")
class TestNumber(unittest.TestCase):
@allure.story("测试递增序列")
def test_increase(self):
numbers = [1, 2, 3, 4]
for i in range(len(numbers) - 1):
with allure.step("校验 {} 是否小于 {}".format(numbers[i], numbers[i+1])):
self.assertLess(numbers[i], numbers[i+1])
@allure.story("测试递减序列")
def test_decrease(self):
numbers = [4, 3, 2, 1]
for i in range(len(numbers) - 1):
with allure.step("校验 {} 是否大于 {}".format(numbers[i], numbers[i+1])):
self.assertGreater(numbers[i],
numbers[i+1])
if __name__ == "__main__":
#生成 allure 报告需要的数据存在allure-report 目录下unittest.main(testRunner=xmlrunner.XMLTestRunner(output="test_reports"))
在该代码中,我们使用了allure的装饰器@allure.feature和@allure.story来定义测试报告的功能和故事,使用了with allure.step()代码块来标识测试用例的步骤。最后,在运行测试时,我们需要定义一个输出目录来存储报告数据,代码中采用的是使用xmlrunner模块来将结果转换成XML格式文件,然后再使用allure-cli生成测试报告。
注意,需要安装allure-python-commons和allure-python-commons这两个库。可以使用以下命令来安装:
pip install allure-pytest allure-python-commons
运行测试后,将生成一个名为test_reports的目录,包含多个XML格式的文件,这些文件可以被allure-cli生成并展示到浏览器中,例如:
allure serve test_reports
然后在浏览器中打开http://localhost:5050即可看到测试报告。
第七步,错误的提示。
提示:请使用C语言的selenium框架书写百度查询的测试代码。
输出:
很抱歉,Selenium本身是基于Java编写的UI自动化测试框架,不支持C语言。Selenium的C#、Python、Ruby、JavaScript、Perl、PHP等语言版本都是通过开发者们基于Java版本封装而来的。如果您有C语言的自动化测试需求,推荐您使用其他框架和工具实现。
第八步,要求用POM格式来完成。
提示:请使用selenium4.8.3版本+pytest框架书写百度查询的测试代码。代码中使用显示等待和POM技巧。并且支持allure报表。
输出:
————————————————————————————————
好的,我会尽快完成。在开始之前,请确认你已经安装了以下库:
-
selenium 4.1.0
-
pytest 6.2.5
-
allure-pytest 2.9.45
代码如下:
import allure
import pytest
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class BaiduSearchPage:
"""百度搜索页面"""input_box =
(By.CSS_SELECTOR, "#kw")search_button =
(By.CSS_SELECTOR, "#su")def __init__(self,
driver):
self.driver = driverdef input_keyword(self,
keyword):
self.driver.find_element(*self.input_box).send_keys(keyword)def
click_search_button(self):
self.driver.find_element(*self.search_button).click()
class TestBaiduSearch:
"""测试百度搜索功能"""@allure.epic("百度搜索")@allure.feature("基础功能")@allure.story("搜索")@allure.title("验证搜索功能")
@pytest.mark.parametrize("keyword", ["pytest",
"selenium", "allure"])
def test_search(self,
driver, keyword):
# 访问百度首页
driver.get("https://www.baidu.com/")# 实例化页面对象search_page =
BaiduSearchPage(driver)# 输入搜索关键词
search_page.input_keyword(keyword)# 点击搜索按钮search_page.click_search_button()# 显示等待搜索结果页面加载完成WebDriverWait(driver,
10).until(
EC.presence_of_element_located((By.CSS_SELECTOR,
"#content_left")))# 验证搜索结果页面标题包含搜索关键词assert keyword in driver.title
如上所述,这个脚本包括了以下主要组件:
-
1. BaiduSearchPage:一个页面对象模式类,封装了页面元素和操作方法。
-
2. TestBaiduSearch:测试用例类,使用了fixture来实例化webdriver并传递给测试用例。
-
3. pytest.parametrized:使用了 pytest.parametrize() 装饰器来运行多个关键词的测试。
此外,还使用了以下 pytest 和 allure 的装饰器:
-
pytest.mark.parametrize:参数化测试用例
-
allure.epic:定义测试中的 “epic” 级别标签
-
allure.feature:申明被测系统的一个功能
-
allure.story:给定测试用例的一个故事
-
allure.title:为测试用例定义一个标题,使其更易于阅读和理解
你可以运行命令时添加 -v 和 -s 参数获取更详细的测试信息。在执行测试后,你可以使用 allure 来生成漂亮的报告,命令如下:
pytest --alluredir=./result
allure serve ./result
第九步,要求PHP来写。
提示:请使用selenium4.8.3版本+PHP 5.6.28语言书写百度查询的测试代码。
输出:
好的,以下是一个使用Selenium 4.0.0版本和PHP 5.6.28语言,实现在百度搜索框中输入关键词并点击搜索的测试代码示例。代码中使用显示等待函数进行等待。
<?php
require_once('vendor/autoload.php');
use Facebook\WebDriver\Remote\RemoteWebDriver;
use
Facebook\WebDriver\Remote\WebDriverCapabilityType;
use
Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;
class BaiduSearchTest extends
PHPUnit_Framework_TestCase
{
/*** @var RemoteWebDriver
*/
protected $webDriver;
public static function setUpBeforeClass()
{
// 设置Chrome浏览器启动路径
putenv('webdriver.chrome.driver=/usr/local/bin/chromedriver');}
protected function setUp()
{
// 创建ChromeDriver设置
$options = new \Facebook\WebDriver\Chrome\ChromeOptions();
$options->addArguments([
'--disable-dev-shm-usage',
'--no-sandbox',
'--disable-gpu',
]);
// 创建ChromeDriver实例
$capabilities = [
WebDriverCapabilityType::BROWSER_NAME => 'chrome',
WebDriverCapabilityType::PLATFORM => 'Linux',
'goog:chromeOptions' => $options->toArray(),
];
$this->webDriver = RemoteWebDriver::create(
'http://localhost:4444/wd/hub',
$capabilities
);}
protected function tearDown()
{
// 关闭浏览器
$this->webDriver->quit();}
public function testSearch()
{
// 打开百度首页
$this->webDriver->get('https://www.baidu.com');
// 找到搜索框,输入关键词并按回车键
$searchInput =
$this->webDriver->findElement(WebDriverBy::id('kw'));
$searchInput->sendKeys('Selenium');
$searchInput->submit();
// 等待搜索结果页面加载完成
$webDriverWait = new \Facebook\WebDriver\WebDriverWait(
$this->webDriver,
10,
1000
);
$webDriverWait->until(
WebDriverExpectedCondition::titleContains('Selenium')
);
// 断言搜索结果页面标题是否包含"Selenium"
$this->assertContains(
'Selenium',
$this->webDriver->getTitle()
);}
}
在这个例子中,我们使用了PHPUnit测试框架、PHP 5.6.28语言和Selenium 4.0.0版本。代码使用Chrome浏览器作为测试浏览器,使用了显示等待函数来等待搜索结果页面加载完成。在执行测试时,测试框架会自动启动一个Chrome浏览器(具体的路径需要根据你的实际情况来设置),打开百度首页,输入关键词并提交搜索,再等待搜索结果页面加载完成后,断言搜索结果页面标题中是否包含"Selenium"。
我们还需要使用Composer来安装PHPUnit和Selenium框架:
composer require phpunit/phpunit composer require php-webdriver/webdriver |
此外,还需要下载Chrome浏览器驱动chromedriver,然后启动Selenium Server(可以通过java -jar selenium-server-standalone.jar命令启动)。
最后,在终端中执行phpunit命令即可运行测试。
总结:
使用ChatGPT可以很有效的辅助IT工作
需要在理解IT基础的前提下使用ChatGPT,比如你知道Selenium的显示等待就获取不到最好Selenium代码。
最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】