I'm reading a list of customer names and using each to find an element.
Before reading the list, I make can confirm this works when I hard-code the name,
datarow = driver.find_element_by_xpath("//span[contains(text(),'ACME Anvil Company')]")
But when I read in the customer list and use it like this, I get a NoSuchElement exception. I know I'm getting the name into the customer variable because the print statement confirms it.
for customer in customerlist:
print("START OF DATA FOR CUSTOMER: " +customer)
datarow = driver.find_element_by_xpath("//span[contains(text(),'"+customer+"')]")
Do I have something wrong with the '" +customer+ "' part? I've tried it a bunch of different ways.
Possibly the list elements eg customer , includes leading or trailing white spaces. So when you print through print()
statement you are overseeing those.
But when you use the xpath as:
datarow = driver.find_element_by_xpath("//span[contains(text(),'"+customer+"')]")
Those whitespaces comes into play and no matches are found.
You can use the following solution:
datarow = driver.find_element_by_xpath("//span[contains(.,'"+customer+"')]")
Ideally, to locate the element you need to induce WebDriverWait for the visibility_of_element_located()
and you can use the following Locator Strategy :
datarow = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(.,'"+customer+"')]")))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.