我正在使用Python中的Selenium设计一个测试框架。我试图将Web元素信息分成JSON文件并从中读取到我的框架中。然后,我的测试脚本将从下面的脚本中提取,因此所有3个实体都是分开的。我刚刚开始,所以我有一个网络元素要测试。
脚本看起来像这样:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json
from Values import strings
elements = 'elements.json'
data = json.loads(elements)
class HomeScreen:
def __init__(self, driver):
self.driver = driver
self.title = WebDriverWait(self.driver.instance, 10).until(
EC.visibility_of_element_located((
By.CLASS_NAME, data['name'][0])))
def validate_logo_is_present(self):
assert self.title.is_displayed()
elements.json文件如下所示,目前只有一个条目:
{
"name": "LOGO",
"element": "logo img-responsive",
"type": "CLASS_NAME"
}
我想为这个特殊情况做些什么是访问" logo img-responsive"在顶部脚本的以下行中:
By.CLASS_NAME, data['name'][0])))
我不会粘贴我的测试脚本,因为这与我认为无关,但是当我运行它时,我收到以下错误:
raise JSONDecodeError("Expecting value", s, err.value) from None
E json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
任何想法如何解决这个问题?一般来说,将元素保存在json文件中是一个坏主意吗?我应该直接将它们嵌入到上面的顶级脚本中吗?我想使用该文件我会消除可能的冗余,但我知道它会变得冗长。
修改
如果有帮助,这就是我写JSON文件的方式:
def write_to_json(lst, fn):
with open(fn, 'a', encoding='utf-8') as file:
for item in lst:
x = json.dumps(item, indent=4)
file.write(x + '\n')
write_to_json(res, 'elements.json')