python - 这里有什么区别阻止它工作?
问题描述
我正在阅读客户名称列表并使用每个名称查找一个元素。
在阅读列表之前,我可以在硬编码名称时确认它是否有效,
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+ "' 部分有问题吗?我已经尝试了很多不同的方法。
解决方案
可能的列表元素,例如customer,包括前导或尾随空格。因此,当您通过声明打印时,print()
您正在监督这些。
但是当您将xpath用作:
datarow = driver.find_element_by_xpath("//span[contains(text(),'"+customer+"')]")
这些空格开始发挥作用,找不到匹配项。
解决方案
您可以使用以下解决方案:
datarow = driver.find_element_by_xpath("//span[contains(.,'"+customer+"')]")
理想情况下,要定位您需要诱导WebDriverWait的元素visibility_of_element_located()
,您可以使用以下Locator Strategy:
datarow = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(.,'"+customer+"')]")))
推荐阅读
- c# - ghostscript PDF to Png 裁剪 x 和 y
- javascript - 如何停止警告:您似乎正在使用 Firebase JS SDK 的开发版本?
- angular - 如何改变模态对话框的位置?
- tensorflow - add_n() 最多接受 2 个参数(给定 4 个)
- sql - 在 PostgreSQL 中对相似的行进行分组并对组进行计数
- c++ - 为什么使用“b < a ? a : b" 而不是 "a < b ? b : a” 来实现最大模板?
- c++ - Print 3 Objects from the same class
- parsing - Bison:在 GLR 解析器中按类型/YYERROR 区分变量
- android - Xamarin.Forms - AOT compile not working (for Android)
- eclipse - 如何在 azure 中测试我已发布的 RESTful Web 服务