我会尽量说清楚。让我们在两个浏览器中使用相同的测试用例。打开页面并通过以下方法查找元素:
wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Logout"))).click(); 完全相同的情况下,它在Chrome中工作很好,但在Firefox中却找不到这个元素。我在用:
Selenium 3.4
GeckoDriver 0.16
Firefox 53.0过了一段时间,我发现唯一的区别是,我想要通过文本找到的元素是不可触及的。尽管它与Chrome完美地结合在一起。有没有办法解决这个问题,或者我必须做一个全新的课程,并采取另一种方法?
发布于 2017-05-01 14:57:15
找到元素的最可靠的方法是通过ID或名称,或者可能是CSS定位器。使用其他元素属性定位不太可靠。
最不可靠的方法是你可以在问题中找到的最常见的方法(所以你可以猜到这是最容易出错的)--通过XPath。
想想这个功能是如何实现的。WebDriver实现必须有自己的浏览器DOM镜像副本,并操作自己的副本以使其与浏览器的副本保持同步。这两个版本都将使用缓存和其他优化来提高性能。在这种情况下,很多事情都可能出错,令人惊讶的是,它的工作就像它一样可靠。
发布于 2017-04-30 12:26:28
在不同的浏览器中,您会发现这一点很多。
使用手动延迟和简单的find元素进行调查,以开始缩小问题范围。
您可能需要调整测试代码,以便在不同的浏览器中通过测试代码。
发布于 2023-04-11 08:54:28
您所面临的问题可能是由于每个浏览器处理web元素的方式不同造成的。某些元素可能在不同的浏览器中呈现不同,导致相同的代码在一个浏览器中工作,而在另一个浏览器中不工作。
解决此问题的一种方法是使用更健壮的定位器,这些定位器不那么依赖于网页的实际呈现。例如,您可以使用By.linkText("Logout"),而不是使用By.xpath("//a[contains(text(),'Logout')]")。这个xpath查找包含文本"Logout“的所有<a>元素。
要尝试的另一件事是将Selenium和GeckoDriver版本更新为最新的稳定版本。这可能解决导致Firefox中找不到元素的任何兼容性问题。
还值得检查的是,是否有任何特定于浏览器的配置需要设置,才能使测试正常运行。例如,Firefox可能需要使用不同的配置文件,或者某些浏览器设置可能需要调整。
如果这些方法都不起作用,您可能需要为Firefox创建一个单独的类,并相应地修改测试用例。然而,这应该是最后的手段,因为它可以增加额外的维护开销,并增加测试套件的复杂性。
参考文献:
https://sqa.stackexchange.com/questions/27011
复制相似问题