繁体   English   中英

有时 xpath 不工作,但有时相同的 xpath 在运行自动化时工作

[英]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/

http://www.guru99.com/xpath-selenium.html

在此之前的步骤是否会导致 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM