2017-06-15 39 views
0

我正在寻找简单地通过CSV导入信息列表并将其转换为简单操作,但是我收到以下错误消息:AttributeError:'str'对象没有属性'__name__'返回

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sst/cases.py", line 217, in run_test_script 
    exec(self.code, self.context) 
    File "./randd/exec_tests.py", line 39, in <module> 
    use_csv("randd/testcases/login.csv") 
    File "./randd/exec_tests.py", line 31, in use_csv 
    wait_for(action_input, locator_from_xpath(str(locator_input))) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sst/actions.py", line 146, in inner 
    return func(*args, **kwargs) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sst/actions.py", line 926, in wait_for 
    return _wait_for(condition, False, _TIMEOUT, _POLL, *args, **kwargs) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sst/actions.py", line 885, in _wait_for 
    if config._current_test_assertion_count is not None and 'assert' in condition.__name__: 
AttributeError: 'str' object has no attribute '__name__' 

下面是正在使用的Python代码:

# Import Libs 
import logging 
import csv 
import sys 
import testdata 
from sst.actions import (run_test, go_to, click_element, assert_displayed, wait_for, write_textfield, sleep) 
from sst.locators import (find_within, locator_from_css_selector, locator_from_xpath) 

logger = logging.getLogger("CSVTests") 

def use_csv(csv_file_path): 

    #file = open(sys.argv[1], 'rb') 
    file = open(csv_file_path, 'rb') 
    testcase = csv.reader(file) 
    next(testcase) 

    for row in testcase: 

     testcase_id = row[0] 
     action_input = row[1] 
     locator_input = row[2] 
     detail = row[3] 
     description = row[4] 

     logger.debug(str(testcase_id)) 
     print(action_input) 
     print(locator_input) 

     # print(wait_for(action_input, locator_from_xpath(locator_input))) 
     wait_for(action_input, locator_from_xpath(str(locator_input))) 

    file.close() 

# Goto Build 
go_to(testdata.get_base_url()) 

# Run Tests 
use_csv("randd/testcases/login.csv") 

请参阅CSV的一个片段如下:

TestCase ID,Action,Element/Locator,Option/Text/Result,Description 
1,assert_displayed,"//body//div[@class='container-fluid']//div[contains(@class,'box')]",n/a,Checking that the login box is displayed. 
2,assert_displayed,"//body//div[@class='container-fluid']//div[contains(@class,'box')]/div[@class='icon-holder']",n/a,Checking that the Frog icon is displayed. 

回答

0

错误发生的原因是:在SST库代码存在于__name__访问:

condition.__name__ 

而且condition不应该是一个字符串对象,但接收的电流值实际上是一个字符串。

我的猜测是,在你的代码,在该行:

wait_for(action_input, locator_from_xpath(str(locator_input))) 

你不”必须包装locator_inputstr(),所以:

wait_for(action_input, locator_from_xpath(locator_input)) 

应该工作