[英]Sometimes xpath is not working but sometimes same xpath is working while running automation
我写了一个像下面这样的xpath:
//div[contains(@id,'ext-element-')]/table[2]/tbody/tr/td/div/span
相同的 xpath 有时会找到特定的元素。但有时会抛出
元素未找到异常。
有什么方便的方法可以解决这个问题吗?
xPath 中的元素越多(例如tbody/tr/td/div
),它被破坏的可能性就越大(有时出于神秘的原因)。
在可能的情况下,使用descendant
跳过它们,例如:
//div[contains(@id,'ext-element-')]/table[2]/descendant::span[contains(@id, 'spanId')]
或者只是双斜线//
(意味着任何孩子或子孩子):
//div[contains(@id,'ext-element-')]/table[2]//span[contains(@id, 'spanId')]
较短,是的,但可读性较差(容易错过斜线,然后想知道发生了什么)。 但还是大多偏爱双斜线。
使用“轴名称”可以使您的 xPath 更加健壮。
以下是一些资源:
http://seleniumworks.blogspot.de/2014/03/xpath-selenium-uses-part-ii.html
https://www.simple-talk.com/dotnet/.net-framework/xpath,-css,-dom-and-selenium-the-rosetta-stone/
在此之前的步骤是否会导致 DOM 发生更改(例如,新页面加载或更改页面的 AJAX 请求)? 如果是,那么很可能是时间问题:有时找不到元素,因为在页面加载时发生了对该元素的请求。 您应该等待元素存在。 然后找到元素并执行接下来的操作。
不确定这是否对您有很大帮助,但我遇到了类似的问题,其中driver.find_element_by_xpath(...)
最初会返回信息,但几秒钟后运行相同的事情会导致'Element Not Found'
异常,所以我导入了时间并在我的driver.get(...)
之后放置了一个sleep(2)
driver.get(...)
并为我修复了它。
希望有帮助。
始终尝试使用绝对路径; 否则尝试向 XPATH 添加索引; 否则选择相对路径的第三个选项(保持最小)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.