- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
为了同时针对两个浏览器(Chrome 和 IE)运行测试,我一直在与常见的“向远程 WebDriver 服务器请求 URL 的 HTTP 请求......在 x 秒后超时”进行了几个月的斗争,花费一次拖网 stackoverflow 和搜索引擎结果数小时以尝试找到解决方案。
我的行为与我之前的其他人一样,在点击函数超时或尝试获取 url 时有所不同,并且在各种情况下我将页面加载和隐式等待超时增加到 600 秒以上,在元素之前插入等待, 在调用 url 之后, 在调用 url 之前, 在调用驱动程序构造函数之后并作为驱动程序对象调用中的参数。
我曾尝试包含 javascript 执行器脚本(由之前关于此问题的 SO 帖子的答案提供),在继续执行操作之前检查页面加载就绪状态是否已完成,但没有成功。
我已尝试将我的 chrome 和 IE、selenium web 和支持驱动程序全部更新到最新的兼容版本,手动调用最新兼容浏览器可执行文件的二进制文件 - 以及尝试回滚到人们报告的以前版本成功(chrome v48,chromedriver 2.22.0.0,webdriver 2.53.1)。我尝试添加“无沙盒”作为 chrome 选项,确保我的 IE 安全区域都共享相同级别的保护。
我调查了我的页面是否正在使用 AJAX 脚本,并尝试使用各种线程中提供的解决方案来适应任何动态内容。
在并行查询之外单独运行 IE 或 Chrome 时,没有观察到超时问题。当 chrome 初始化其远程 WebDriver 实例时,就会出现此问题。我也尝试过使用 32 位和 64 位版本的 chrome/ie 驱动程序。
我从许多主题和页面中提取了信息,但这些是最相关的一些。
Selenium Error - The HTTP request to the remote WebDriver timed out after 60 seconds
https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5441
https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5071
Selenium Error - The HTTP request to the remote WebDriver timed out after 60 seconds
Selenium WebDriver throws Timeout exceptions sporadically
这是一个输出示例:
System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
----> System.AggregateException : One or more errors occurred.
----> OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL http://localhost:52240/session/a969dbe2-3b0c-461f-a979-21bafec0dd8e/element/7005aeab-ff31-454a-8f78-0a39ad861695/click timed out after 120 seconds.
----> System.Net.WebException : The request was aborted: The operation has timed out.
我从案例列表中调用驱动程序,稍后将其添加到并行查询中:
private static IWebDriver DefineDriver(Browser supportedbrowsers)
{
var baseDriverPath = ConfigurationManager.AppSettings["BaseDriverPath"].ToString();
var ieDriverFolder = ConfigurationManager.AppSettings["IeDriverFolder"].ToString();
var chromeDriverFolder = ConfigurationManager.AppSettings["ChromeDriverFolder"].ToString();
ChromeOptions chromeoptions = new ChromeOptions();
chromeoptions.BinaryLocation = @"C:\WebDrivers\Binary\chrome32_49.0.2623.75\chrome.exe";
chromeoptions.AddArgument("no-sandbox");
InternetExplorerOptions ieoptions = new InternetExplorerOptions();
ieoptions.IntroduceInstabilityByIgnoringProtectedModeSettings = false;
IWebDriver driver = null;
switch (supportedbrowsers)
{
case Browser.Chrome:
driver = new ChromeDriver(Path.Combine(baseDriverPath, chromeDriverFolder), chromeoptions, TimeSpan.FromMinutes(5));
break;
case Browser.InternetExplorer:
driver = new InternetExplorerDriver(Path.Combine(baseDriverPath, ieDriverFolder), ieoptions, TimeSpan.FromMinutes(5));
break;
default:
driver = new ChromeDriver(Path.Combine(baseDriverPath, chromeDriverFolder), chromeoptions, TimeSpan.FromMinutes(5));
break;
}
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(120));
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromMinutes(10));
driver.Manage().Timeouts().SetScriptTimeout(TimeSpan.FromMinutes(10));
driver.Manage().Window.Maximize();
return driver;
}
在我的测试代码中,我只是启动一个页面,导航到另一个本地页面,然后尝试单击页面上立即可见的按钮。
我已经尝试将按钮的点击命令包装在一个 try catch 中,添加了具有预期条件(显示、启用、可点击)的显式等待,使用了线程 sleep ,这在运行单个浏览器时都按预期工作。
例如,我通过以下方式调用按钮:
public void SelectAddWorkWorkPageButton()
{
WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementToBeClickable(addNewWorkItemWorkPageBtn));
addNewWorkItemWorkPageBtn.Click();
}
它定位以下元素:
//Create New Button
[FindsBy(How = How.Id, Using = "btnWorkDefinitionCreateNewWorkDefinition")]
public IWebElement addNewWorkItemWorkPageBtn { get; set; }
它是 HTML:
<i id="btnWorkDefinitionCreateNewWorkDefinition" title="Add work" class="fa fa-plus-circle cursorPointer crudIcon" style="font-size: 20px;margin:0;padding-left:15px" ng-click="AddNewWorkDefinition()" role="button" tabindex="0"></i>
作为关于超时的单独说明,在更新到最新版本的 WebDriver 时,我还将超时更新为新格式:
//driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(120);
//driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(120);
//driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(120);
这个问题似乎早在 2012 年就存在于社区中,而且根据我的发现,它从未被孤立和明确识别,今年 5 月仍有人报告该问题。
Selenium Error - The HTTP request to the remote WebDriver timed out after 60 seconds
最佳答案
在尝试了更多解决方法(包括使用 Protractor 来处理 AngularJS 代码)之后,我终于将“对 URL 的远程 WebDriver 服务器的 HTTP 请求”异常消息的原因归结为运行时的特定问题IEDriver 单独或并行针对测试中的应用程序。
似乎应用程序正在使用 SignalR 连接来处理某些进程,这导致 IEDriver 操作(例如单击事件)超时,因为 SignalR 连接永远不会完成,因此导致 IEDriver 无法确定该页面在执行其他操作之前已完成加载。
当 SignalR 连接类型更新为使用“长轮询”时,这完全解决了 IEDriver 超时问题。
这些帖子中提供了更好的解释,并且要感谢那些在其中做出贡献的人,否则我永远不会猜到 SignalR 是原因: https://github.com/SignalR/SignalR/issues/293
C# Protractor AngularJS IEDriverServer Click() Exception "Timed out waiting for page to load"
谢谢。
关于c# - 跨浏览器并行运行测试时,向远程 WebDriver 服务器发出 URL 超时的 HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44899023/
我想在 Watir webdriver 中使用 selenium webdriver Actions。这可能吗? 也可以在 watir webdriver 中使用 java 代码。请帮忙。 我浏览了很
我正在使用 watir-webdriver 浏览我的网站并在不同的浏览器中抓取屏幕截图。 有时在 IE 中截取的屏幕截图大小合适,但颜色完全是黑色。同时运行的 Firefox 测试看起来很好。 bro
我已经编写了 driver.findElement(By.id("kfiDocumentLink")).click(); 用于单击“KFI 文档”按钮的代码。 请找到HTML代码。 Download
我有一个包含以下内容的 html 页面: This is Login page. Please click below link
我想获得页面加载异常,但仍然没有结果。 我使用implicitlyWait 设置计时器以抛出异常。 WebDriver driver = new FirefoxDriver(); driver.man
我正在使用具有 IE 特定应用程序的 Selenium Webdriver。我知道我们可以截取执行的截图。同样,是否有任何选项可以将 selenium 执行记录为视频? 最佳答案 WebDriver
Selenium WebDriver 如何克服同源策略? Selenium RC 中存在同源策略问题 最佳答案 First of all “Same Origin Policy” is introdu
我将如何从输入文件中提取文本?我尝试使用 XPath/CSSSelector 但我得到一个空文本,因为它是一个输入字段。 这是我的 html 代码: 结果:195 行中的 1 到 50
如何使用 WebDriver 自动验证码? 是否有其他方法可以使用 Webdriver 自动执行验证码? 最佳答案 您只能使用“alt”属性中的显示验证码值来自动化验证码。 在 WebElement
最近我开始学习 WebDriver,因为我工作的客户计划使用 WebDriver 来自动化 Web 应用程序。 我怀疑 WebDriver 如何在网页上定位其 ID 动态变化的元素(比如每次登录应用程
我发现 watir-webdriver 在一个非常大的页面上通过正则表达式定位元素非常慢,至少在 FF 8.0.1 中对我来说是这样。航类搜索结果页面示例(包含大约 50 个搜索结果,每个都是 htm
我有一个动态更改其文本的字段。我需要一种方法来等待文本被更改。我不知道会出现什么文本,但我知道当前那里有什么文本。所以我想等待它在元素中消失。有办法吗? 最佳答案 你可以试试ExpectedCondi
自从我使用 Firefox 升级到 3.0 beta 后,我就有了这个异常(exception)。 Exception in thread "main" java.lang.IllegalStateE
任何人都可以帮助我使用 Selenium webdriver 截取整页屏幕截图。我正在使用 c#/Nunit。我正在使用的当前方法不是完整的浏览器页面。 我正在使用下面的代码截取屏幕截图。 publi
我通过 WebDriver (Chrome) 从网页下载图像 // STEP 1 $driver->get($link); // STEP 2 $els=$driver->findElements(W
Selenium WebDriver 的默认隐式等待值是什么? selenium 文档说它是“0”,但是当我在一个全新的项目上调用 .findElement 时,DOM 上不存在元素,它似乎在一段时间
我正在使用 Webdriver 测试 Web 应用程序,大致如下所述。当测试通过时,一切都很好。但是,当其中一个测试失败时,我注意到以下 2 个问题。 a) 如果一个测试失败,则套件中的其余测试将超时
我正在使用 Selenium WebDriver 并遇到问题。 在 UI 中,WebDriver 可以看到元素,但无法执行任何操作,例如单击、键入、选择等。元素由 selenium 找到并作为 web
我在 Java 中使用 Web 驱动程序处理 UntrustedSSLcertificates 时陷入困境。 我创建了 Firefox 配置文件,如: FirefoxProfile profile =
选择的编程语言是 Java。我已经用 Java 编写了一个方法,我将 WebDriver 作为参数传递给它... public boolean myMethod(WebDriver webDriver
我是一名优秀的程序员,十分优秀!