yaml文件:
data:
-
appium
-
selenium
-
requests
#等价于{“keyword”:[“appium”,“selenium”,“request”]}
steps: -
webdriver:
browser: chrome -
find_element:
- id
- search-button
-
click:
-
find_element:
- id
- search-term
-
send_keys: ${data}
代码文件:
‘’’
def load_data(path):
#打开文件
with open(path,encoding=‘utf-8’) as f:
#(添加的是文件)
return yaml.safe_load(f)
class TestDemo:
data_file=load_data(“test_data.yaml”)
test_data=data_file[“data”]
test_steps=data_file[“steps”]#改在数据,
@pytest.mark.parametrize(“data”,test_data)
def test_search(self, data):
#改造测试步骤,遍历test_steps.yaml中的所有values
#测试步骤数据驱动
for step in self.test_steps:
print(step)
if “webdriver” in step:
#step.get(“webdriver”).get(“browser”,“chrome”),取webdriver值,{‘browser’: ‘chrome’},
#下一个get是取browser的值,然后如果没有这取chrome
#又因为这个要被公共使用
#if step.get(“webdriver”).get(“browser”,“chrome”)
#browser区分下大小写,然后做判断
browser=str(step.get(“webdriver”).get(“browser”,“chrome”)).lower()
#判断,browser区分下大消息,如果browser是chrome,
if browser==“chrome”:
driver=webdriver.Chrome()
elif browser==“firefox”:
driver=webdriver.Firefox()
else:
print(“没有驱动的浏览器”)
if “get” in step:
#取出来url
url=step.get(“get”)
driver.get(url)
if “find_element” in step:
by=step.get(“find_element”)[0]locator=step.get("find_element")[1] current_element=driver.find_element(by, locator) if "click" in step: current_element.click() if "send_keys" in step: value=str(step.get("send_keys")) value=value.replace("${data}",data) current_element.send_keys(value)
‘’’
问题:1.yaml文件中有两个find_element,而代码的最后一行current_element.send_keys(value),current_element,他的定位应该是
- find_element:
- id
- search-button
而send_keys,实际对应的定位应该是
** - find_element:**
** - id**
** - search-term**
但是最终代码运行还是正确的,我对这里没太理解,麻烦老师仔细说下是怎么回事