更新到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上收听
答案 0 :(得分:1)
测试自动化的目标之一是减少Test Execution
时间。因此,如果Firefox geckodriver
使用Marionette
的驱动程序更快,那么它应该让我们感到高兴。现在您的问题必须是如何将geckodriver
与实时Mozilla Firefox Browser
同步。
Thread.sleep(n)
。减慢诱导Thread.sleep(n)
不是最佳编程实践的一部分。它会降低性能。所以让我们看看其他可用的选项。接下来你提到了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);
您可以在此处找到official documentation,并在此处找到detailed stackoverflow discussion
。
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");
您可以在这里找到official documentation here并找到detailed stackoverflow discussion
。
答案 1 :(得分:0)
更好地在Chrome中使用,但需要两者都一样。
我运行testNg,我得到的例外是:构建信息:版本:&#39; 3.4.0&#39;,修订版:&#39;未知&#39;,时间:&#39;未知&#39;
我通过修改Thread.sleep来修复它,这是不推荐的,但这是唯一可行的。流利的等待没有工作或我