我是Python/Pytest/Pywinauto等奇妙世界的新手,我决不是一个开发人员,所以请对我宽容一点:(
我正在尝试运行一个测试,以根据以下内容断言文件中的文本:
import pytest
def test_fileContains123456():
line = open("my_file.html", "r").readlines()[20]
assert r"THIS1 123456 YES" in line
这正确地断言文本存在于文件中的特定行上。有没有办法提高它的准确性,让它从特定线上的位置拾取它?在这种情况下,要断言的文本的位置根据文件中的行或位置1683上的Notepad++列101。
此外,是否有任何方法可以改进上述代码?
提前感谢:(
您似乎正在尝试测试一个HTML文件,该文件的内容可以更改,但其语法结构可能保持不变。换句话说,文件中特定行的内容可以更改,但解析或呈现的结果将保持相同。这意味着你想改进两件事:
- 准确性-断言给定字符串在特定HTML元素内
- 余地-当文件的内容发生变化,但关键的HTML元素仍然有正确的字符串时,您不希望测试中断
要实现这一点,您需要解析HTML文件。Python的内置解析器并不适合您的需求,但您可以尝试一些第三方包,例如lxml。
my_file.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<span id="needle">THIS1 123456 YES</span>
</div>
</body>
</html>
测试.py:
import pytest
from lxml import html
def test_fileContains123456():
parsed = html.parse('my_file.html').getroot()
assert parsed.get_element_by_id('needle').text_content() == 'THIS1 123456 YES'
如何构建测试断言取决于HTML文件的确切内容。我的示例假设HTML元素的id
设置为needle
,并且它的内容应该与搜索字符串完全匹配。然而,还有其他匹配元素的方法,例如使用CSS语法(参见cssselect()
(。