这里有啥区别阻止它工作?
Posted
技术标签:
【中文标题】这里有啥区别阻止它工作?【英文标题】:What is the difference here that prevents this from working?这里有什么区别阻止它工作? 【发布时间】:2021-01-10 22:29:26 【问题描述】:我正在阅读客户名称列表并使用每个名称来查找元素。
在阅读列表之前,我可以在硬编码名称时确认它是否有效,
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+ "' 部分有什么问题吗?我已经尝试了很多不同的方法。
【问题讨论】:
customerlist
是如何创建的?例如,文本中可能有尾随空格或换行符 - 打印变量的 repr()
以准确查看其中的内容。
你的customerlist
是什么样的?您是否检查过它是否真的与您的硬编码字符串相同? (我的意思是==
-checked,仅打印是不够的)
【参考方案1】:
可能是列表元素,例如客户,包括前导或尾随空格。因此,当您通过print()
声明打印时,您正在监督这些。
但是当你使用xpath 时:
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+"')]")))
【讨论】:
@jasonharper 我只是通过在文本文件中输入名称来创建客户列表.....输入名称,按回车键,输入名称,按回车键......所以有一个有意义的我没有看到的字符。以上是关于这里有啥区别阻止它工作?的主要内容,如果未能解决你的问题,请参考以下文章
Xcode:在调试时,有啥方法可以阻止它在最前面的窗口中打开导航器?