问题标签 [selenium-firefoxdriver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
414 浏览

java - pageLoadTimeout 不适用于具有 PageObjects 的 firefox

我使用 Selenium WebDriver 来测试一个网站。我有 PageObjects 来表示LoginPageHomePageManagementPage。我的测试首先登录,它返回 a HomePage,然后单击一个返回 a 的按钮ManagementPage。然后它会检查一堆东西,单击返回的链接HomePage,然后单击注销链接。

这一切都适用于 Chrome,pageLoadTimeout根本不使用 a。但是,在 Firefox 中,我NoSuchElementException在尝试单击注销链接时会打开。我假设这是因为尝试单击注销按钮时页面尚未完全加载。所以我driver.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS)在我的测试开始时放了一个,就在我创建驱动程序之后。我仍然得到同样的错误。将超时更改为5 milliseconds证明超时有效,因为页面未加载并TimeOutException抛出 a。

如果我将 移动driver.manage().timeouts().pageLoadTimeout(5000, TimeUnit.MILLISECONDS)到 的构造函数,HomePage那么它一切正常。所以我可以通过为每个 PageObject 设置超时来解决我的问题。

我希望只能为每个驱动程序设置一次,这就是我从这个问题中收集到的意思。但是这个问题说 pageLoadTimeout 不适用于单击链接,这让我感到困惑,因为我确实为我工作,但前提是我为每个 PageObject 设置了它。

我还有其他事情要做吗?或者,当驱动程序传递给 PageObject 时,超时是否会重置?我看不到这将如何发生,因为我在构造函数中所做的只是:

0 投票
0 回答
1297 浏览

java - Selenium executeScript 不返回列表

Selenium executeScript 没有返回列表。以下代码尝试在电子邮件的主题字段中写入内容,将其保存为草稿,然后通过搜索字段搜索草稿。

以下 javascript 正在获取具有类“Fmd”的所有元素,但 JavaScriptExecutor 未返回 WebElements 列表。

0 投票
0 回答
88 浏览

java - Selenium (Java) - 使用配置文件任意实例化 FirefoxDriver

我正在使用 Selenium FirefoxDriver,无论我做什么,我都希望它从我的默认用户配置文件(插件等)开始。我得到了那个部分的工作。我还编写了一个简单的 GUI 来帮助我控制我的程序。这个 GUI 有一个启动驱动程序的按钮和另一个调用quit()的按钮。

问题:

  1. 我单击开始-> 工作正常。FirefoxDriver 加载了所有插件、书签、...
  2. 我单击关闭-> 工作正常。浏览器干净地关闭(据我所知)。
  3. 我再次单击开始-> 浏览器启动,但配置文件为空白。没有插件,什么都没有

这就是我实例化驱动程序的方式。我不知道是什么导致了这个问题。请帮忙!

0 投票
3 回答
814 浏览

java - Webdriver executeScript 偶尔没有检测到动态生成的元素

我花了很长时间才弄清楚,但我仍然在努力解决这个问题。我正在尝试使用 selenium webdriver 使用 javascript 注入访问网页上动态生成的元素。例如:

现在,当我在 Firefox 控制台中执行此脚本时,它可以正常工作。但是当在 webdriver 5-6 中运行 10 次时,这条线会抛出异常(即使认为元素是物理存在的)。

为什么会这样?什么是解决方案?如果任何提示/答案有用,我一定会投票。

编辑:

我已经放入了 Thread.sleep(500) ,甚至在我的代码中每次出现 executeScript() 之前等待 1000 秒。仍然无法正常工作。

这是(部分)堆栈跟踪:

0 投票
1 回答
3816 浏览

java - 通过xpath Selenium java选择具有动态生成的ID的WebElements

我需要在下拉窗口中选择一个元素。每次我在我正在测试的网站中打开下拉窗口时,网站都会为该下拉窗口随机生成一个 id。下拉窗口的先前实例可见(使用 Firebug)但不可选择。有一个静态路径,但它仅在我使用 ChromeDriver 测试时有效,而不是在我使用 FirefoxDriver 时。按类名定位动态生成的元素(下拉窗口的每个实例都具有相同的类)在我第一次尝试时有效,但之后每次使用 ChromeDriver 和 FirefoxDriver 时都会出错。我认为它可能正在尝试定位第一个实例,而不是可选择的实例。

这是我的动态代码:

这是我的静态代码:

这是动态 HTML:

这是静态 HTML:

0 投票
1 回答
1985 浏览

selenium-webdriver - 使用 WebDriver 和 Visual Studio Online 进行 Selenium 测试

作为我产品的连续集成机制的一部分,我想运行一些 Selenium 测试。我们正在使用 Visual Studio Online。

我尝试使用 IE WebDriver,但它无法连接到我的资源。我已经尝试部署 Firefox 的便携式版本并且测试似乎被卡住了 - 我猜有一个防火墙提示正在发生?

我已经尝试过 PhantomJs 网络驱动程序,但这似乎根本无法正确呈现测试页面(除非我做错了什么)......

所以...甚至可以从 Visual Studio Online 构建服务器运行基于 Selenium 的浏览器测试吗?

0 投票
1 回答
41 浏览

selenium-firefoxdriver - Selenium IDE 2.6 错误记录

我在 Selenium IDE 中运行测试用例并收到错误:[error] Element id=ui-id-31 not found。当我单击要输入值的空框时,会出现此错误。我尝试了不同的方法,例如“verifyTextPresent”和“waitForElementPresent”,但没有奏效。

有谁知道如何管理这个错误?

0 投票
5 回答
10474 浏览

java - 在 java 中创建 FirefoxDriver 时出现 java.lang.NoSuchMethodError

在尝试:

我收到以下错误:

这个问题在 ubuntu 上的 firefox 更新到 32.0 版本后就开始了,我尝试安装 28.0 版本但仍然没有工作。

有任何想法吗?提前致谢

像curiosu所说的将驱动程序版本更改为 2.39 后,出现一个新错误:

解决方案:我终于设法解决了这个问题,我将 selenium webDriver 版本从 2.42.2 更改为 2.39.0 并将 firefox 版本从 32.0 降级为 28.0

0 投票
1 回答
578 浏览

selenium-webdriver - Selenium 2 找不到 Firefox 配置文件

在 Grid 设置中的 selenium 2 中,我使用它来尝试加载名为“量角器”的配置文件:

这不起作用,我收到此错误:

如果我使用 -p 参数和量角器启动 Firefox,如下所示:

它确实有效。这里可能出了什么问题?

0 投票
1 回答
2705 浏览

c# - Selenium FirefoxDriver:在不同实例之间共享会话/Cookie

我有以下情况:

我有一个 C# WPF 程序,我尝试同时访问不同的网站并从中收集数据。

网站 A (www.example.com) 有一个登录表单,登录后会显示许多链接,例如 www.example.com?redir=abc

我所做的:

  • 启动 FirefoxDriver 1
  • 登录
  • 无限循环:收集所有链接并刷新页面

问题是,我有另一个 FirefoxDriver 实例 2 在我的项目的不同线程中运行。

在这个实例 2 中,我访问了我之前收集的链接并想要打开它们。

问题是,为了访问它们(它们正在重定向),我需要再次登录到网站 A。当我登录时,实例 1 上的会话结束,所以我需要再次登录等等等等,所以有效实例正在“窃取”彼此的会话。(我想进一步扩展它以拥有实例 3,4 ......这样会使问题变得更糟)。

显然我的问题是实例 1 和实例 2 没有共享同一个会话。

我发现解决问题的可能性:

  • 使用相同的 FirefoxProfile :尝试,不工作,仍然不共享会话
  • 使用带有 2 个窗口/选项卡的一个实例,并使用 Selenium ThreadGuard 类从两个线程访问它:似乎非常复杂,因为我需要一直在窗口之间切换
  • 使用 Selenium Grid:似乎有点矫枉过正,我还不知道这是否适合我

因此我在问,有人对我应该如何设计这个有建议吗?

谢谢您的帮助。