这里有啥区别阻止它工作?

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:在调试时,有啥方法可以阻止它在最前面的窗口中打开导航器?

阻止cookie有啥影响

有啥方法可以避免 SwiftUI GeometryReader 阻止嵌套视图在列表中增长?

有啥办法可以阻止光线投射穿过物体?

有啥能阻止优化尾递归?

阻止加载页面