Selenium - FireFox / Marionette驱动程序太快无法控制

时间:2017-09-13 14:54:11

标签: selenium firefox wait geckodriver firefox-marionette

更新到Firefox到版本52后,我不得不将gecko驱动程序更新到v17。但是我以前的所有脚本都在Firefox中失败了,因为它太快而且没有为页面上的元素加载。

我现在被迫添加Thread.sleep等待每次点击。你们有什么解决方案可以帮助我吗?

更好地在Chrome中使用,但需要两者都一样。

我运行testNg,我得到的例外是:构建信息:版本:'3.4.0',修订版:'未知',时间:'未知'

我通过修改Thread.sleep来修复它,这是不推荐的,但这是唯一可行的。流利的等待没有工作或我

1505314327534 geckodriver INFO在127.0.0.1:42753上收听 1505314328131 mozprofile :: profile INFO使用配置文件路径C:\ User \ AppData \ Local \ Temp \ rust_mozprofile.NX5A3KOOQr 1505314328136 geckodriver :: marionette INFO使用args []启动浏览器C:/ Program Files / Mozilla Firefox / firefox.exe 1505314328150 geckodriver :: marionette INFO在localhost上连接到Marionette:65331 1505314331570 Marionette INFO在端口65331上收听

2 个答案:

答案 0 :(得分:1)

测试自动化的目标之一是减少Test Execution时间。因此,如果Firefox geckodriver使用Marionette的驱动程序更快,那么它应该让我们感到高兴。现在您的问题必须是如何将geckodriver与实时Mozilla Firefox Browser同步。

  1. 在您的问题中,您提到过添加Thread.sleep(n)。减慢诱导Thread.sleep(n)不是最佳编程实践的一部分。它会降低性能。所以让我们看看其他可用的选项。
  2. 接下来你提到了not waiting for element on the page to load。这是我们使用WebDriver时遇到的常见问题。解决这个问题的最简单方法是诱导ImplicitWait。简而言之,通过引入ImplicitWait,驱动程序将轮询HTML DOM查看元素或元素的配置时间。到那时,HTML DOM可能会提供您一直在寻找的元素。 ImplicitWait的示例如下:

    • <强>的Python

      driver.implicitly_wait(10)
      
    • <强>爪哇

      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      
  3. 您可以在此处找到official documentation,并在此处找到detailed stackoverflow discussion

    1. ImplicitWait可以大大减慢您的测试执行速度。因此,在这种情况下, ExplicitWait 来解救我们。简而言之, ExplicitWait 是您为WebDriver实例定义,配置和实现的代码块,以便在继续下一行代码之前等待某个条件得到满足。 ExplicitWait 的示例如下:

      • <强>的Python

        password = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "your_xpath")))
        password.send_keys("your_password")
        
      • <强>爪哇

        WebDriverWait wait = new WebDriverWait(driver, 20);
        WebElement password = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("your_xpath")));
        password.sendKeys("your_password");
        
    2. 您可以在这里找到official documentation here并找到detailed stackoverflow discussion

答案 1 :(得分:0)

更好地在Chrome中使用,但需要两者都一样。

我运行testNg,我得到的例外是:构建信息:版本:&#39; 3.4.0&#39;,修订版:&#39;未知&#39;,时间:&#39;未知&#39;

我通过修改Thread.sleep来修复它,这是不推荐的,但这是唯一可行的。流利的等待没有工作或我