As @DavidPike suggests, you should use the da.SearchCursor. I noticed that you are attempting to access and set a map title using ListLayoutElements . This will return a list, and you will need to access the proper text element. It might be easier if you use the dynamic map "Title" as this property can be accessed and changed. Here's a code snippet which illustrates these ideas. Since it looks like you are using shape files, you may need to make some changes.
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
feature = 'survey selection'
fields = ['OID@', 'VendorFarm'] # OID@ is ObjectID token (see search cursor help)
jpgPath = r"C:\Path\For\JPGs" # save location for jpgs
# clear any existing selections
arcpy.SelectLayerByAttribute_management(feature, "CLEAR_SELECTION")
with arcpy.da.SearchCursor(feature, fields) as cursor:
for FID, VendorFarm in cursor: # unpack each row by assigning to field name variables
mxd.title = VendorFarm
query = '"FID" = {}'.format(str(FID))
arcpy.SelectLayerByAttribute_management(feature, "NEW_SELECTION", query)
df.zoomToSelectedFeatures()
arcpy.RefreshActiveView()
jpg = "{}\\{}.jpg".format(jpgPath, VendorFarm) # assuming VendorFarm is valid filename
arcpy.mapping.ExportToJPEG (mxd, jpg)
If you need to use the ListLayoutElements, I would suggest that your map's text elements be named as this will help you find the correct element. Just a rough code snippet to illustrate:
titleElement = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT")
for t in titleElement:
if t.name == 'MapTitle'
t.text = 'Some New Text'
Hope this helps.