在这里有什么区别使它无法正常工作?

问题描述

我正在阅读客户名称列表,并使用它们来查找元素。

在阅读列表之前,我可以在对名称进行硬编码时确认其有效,

    daTarow = driver.find_element_by_xpath("//span[contains(text(),'Acme Anvil Company')]")

但是当我阅读客户列表并像这样使用它时,会出现NoSuchElement异常。我知道我将名称输入到客户变量中,因为打印语句可以确认它。

for customer in customerlist:
    print("START OF DATA FOR CUSTOMER: " +customer)
    daTarow = driver.find_element_by_xpath("//span[contains(text(),'"+customer+"')]")

我的“ + customer +”部分是否有问题?我已经尝试了多种方法

解决方法

可能是列表元素,例如客户,包括前导或尾随空格。因此,当您通过print()语句打印时,您将对其进行监督。

但是当您将用作:

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

这些空格开始起作用,找不到匹配项。


解决方案

您可以使用以下解决方案:

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

理想情况下,要找到需要为visibility_of_element_located()引出WebDriverWait的元素,可以使用以下Locator Strategy

datarow = WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//span[contains(.,'"+customer+"')]")))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...