Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
142 views
Welcome To Ask or Share your Answers For Others

1 Answer

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+"')]")))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...