-1

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.

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
  • 1
    How was `customerlist` created? There might be trailing spaces or newlines in the text, for example - print the `repr()` of the variable to see exactly what's in it. – jasonharper Sep 24 '20 at 15:39
  • What does Your `customerlist` look like? Have You checked that it is really the same as Your hardcoded string? (I mean `==`-checked, just printing isn't enough) – N. Jonas Figge Sep 24 '20 at 15:40

1 Answers1

1

Possibly the list elements e.g. customer, includes leading or trailing white spaces. So when you print through print() statement you are overseeing those.

But when you use the as:

datarow = driver.find_element_by_xpath("//span[contains(text(),'"+customer+"')]")

Those whitespaces comes into play and no matches are found.


Solution

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+"')]")))
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
  • @jasonharper I made the customer list just by entering names in a text file..... type name, press enter, type name, press enter.... So it makes sense that there's a character there I don't see. – David Emmerich Sep 24 '20 at 16:04