首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >硒GeckoDriver与ChromeDriver

硒GeckoDriver与ChromeDriver
EN

Stack Exchange QA用户
提问于 2017-04-30 12:00:26
回答 3查看 3.8K关注 0票数 3

我会尽量说清楚。让我们在两个浏览器中使用相同的测试用例。打开页面并通过以下方法查找元素:

代码语言:javascript
复制
wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Logout"))).click(); 

完全相同的情况下,它在Chrome中工作很好,但在Firefox中却找不到这个元素。我在用:

代码语言:javascript
复制
Selenium 3.4
GeckoDriver 0.16 
Firefox 53.0

过了一段时间,我发现唯一的区别是,我想要通过文本找到的元素是不可触及的。尽管它与Chrome完美地结合在一起。有没有办法解决这个问题,或者我必须做一个全新的课程,并采取另一种方法?

EN

回答 3

Stack Exchange QA用户

回答已采纳

发布于 2017-05-01 14:57:15

找到元素的最可靠的方法是通过ID或名称,或者可能是CSS定位器。使用其他元素属性定位不太可靠。

最不可靠的方法是你可以在问题中找到的最常见的方法(所以你可以猜到这是最容易出错的)--通过XPath。

想想这个功能是如何实现的。WebDriver实现必须有自己的浏览器DOM镜像副本,并操作自己的副本以使其与浏览器的副本保持同步。这两个版本都将使用缓存和其他优化来提高性能。在这种情况下,很多事情都可能出错,令人惊讶的是,它的工作就像它一样可靠。

票数 1
EN

Stack Exchange QA用户

发布于 2017-04-30 12:26:28

在不同的浏览器中,您会发现这一点很多。

使用手动延迟和简单的find元素进行调查,以开始缩小问题范围。

您可能需要调整测试代码,以便在不同的浏览器中通过测试代码。

票数 0
EN

Stack Exchange QA用户

发布于 2023-04-11 08:54:28

您所面临的问题可能是由于每个浏览器处理web元素的方式不同造成的。某些元素可能在不同的浏览器中呈现不同,导致相同的代码在一个浏览器中工作,而在另一个浏览器中不工作。

解决此问题的一种方法是使用更健壮的定位器,这些定位器不那么依赖于网页的实际呈现。例如,您可以使用By.linkText("Logout"),而不是使用By.xpath("//a[contains(text(),'Logout')]")。这个xpath查找包含文本"Logout“的所有<a>元素。

要尝试的另一件事是将Selenium和GeckoDriver版本更新为最新的稳定版本。这可能解决导致Firefox中找不到元素的任何兼容性问题。

还值得检查的是,是否有任何特定于浏览器的配置需要设置,才能使测试正常运行。例如,Firefox可能需要使用不同的配置文件,或者某些浏览器设置可能需要调整。

如果这些方法都不起作用,您可能需要为Firefox创建一个单独的类,并相应地修改测试用例。然而,这应该是最后的手段,因为它可以增加额外的维护开销,并增加测试套件的复杂性。

参考文献:

票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/27011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档