【发布时间】:2020-07-08 22:30:51
【问题描述】:
- C# .NET Framework 4.8 控制台应用程序(32 位)
- Edge(铬)80.0.361.69
- msedgedriver.exe(64bit, 80.0.316.69)
- Windows 10 家庭版 64 位 1909 18363.720
- Selenium.WebDriver 4.0.0-alpha05
static void Main()
{
var edgeOptions = new EdgeOptions
{
UseChromium = true,
BrowserVersion = "80.0.361.69",
BinaryLocation = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
};
var service = EdgeDriverService.CreateDefaultServiceFromOptions(Directory.GetCurrentDirectory(), "msedgedriver.exe", edgeOptions);
using IWebDriver driver = new EdgeDriver(service, edgeOptions)
{
Url = "https://www.naver.com"
};
Console.ReadLine();
//While the program is paused, I opened a new window manually and pressed enter on the console
driver.SwitchTo().Window(driver.WindowHandles[1]); // this takes 30ms
//After calling driver.SwitchTo().Window(),
//a message [1585376776.256][WARNING]: Timed out connecting to Chrome, retrying... appears on the console.
var elements = driver.FindElements(By.Id("whatever")); //this takes 4030ms
}
以上是我的环境和代码
当我运行我的程序时,
Starting MSEdgeDriver 80.0.361.69 (11b2f9c770113c9712ab7dffaca9ea3596d0deb3) on port 13626
Only local connections are allowed.
Please protect ports used by MSEdgeDriver and related test frameworks to prevent access by malicious code.
DevTools listening on ws://127.0.0.1:13630/devtools/browser/6820c242-c3b6-43c1-9e19-98742a95cc18
[1585376743.252][WARNING]: Timed out connecting to Chrome, retrying...
[1585376745.407][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376745.509][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376745.610][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376745.711][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376745.873][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376745.974][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376746.075][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376746.179][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376746.659][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376746.800][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376746.961][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376747.187][SEVERE]: Timed out receiving message from renderer: 0.100
[1585376747.521][SEVERE]: Timed out receiving message from renderer: 0.100
此消息出现在控制台上。
如果我不切换到另一个窗口但每当切换到另一个窗口时,它可以忽略不计,
[1585376776.256][WARNING]: Timed out connecting to Chrome, retrying...
出现在控制台上。
这再次出现,下一个第一个 driver.FindElements() 调用总是需要大约 4 秒。
我用 chrome 测试了这个问题,但结果是一样的。
我用谷歌搜索了很多,但找不到任何合适的答案。
我该如何解决这个问题?
【问题讨论】:
-
不确定你为什么不使用 driver.Navigate().GoToUrl()。您说您正在手动打开窗口并且您正在使用 driver.SwitchTo().Window(driver.WindowHandles[1]);切换到该窗口。我建议您检查您的代码是否引用了正确的窗口。由于窗口是手动打开的,我不确定 selenium 驱动程序是否可以检测到它的切换。出于测试目的,尝试使用代码打开窗口并检查代码是否可以切换到它。另外,尝试计算窗口总数并尝试循环查看打开了哪些窗口。
-
我手动打开窗口的原因是验证码检测到硒并显示出来。我只有两个窗口并进行了很多测试,因此可以确定我的代码没有错。为了给出一个简单的例子,我总结了代码。原始代码是,selenium 导航到登录 url 并等到我手动登录,解决验证码。然后 selenium 点击一个按钮,创建一个新的弹出窗口,切换到它等等。
-
我现在明白你在做什么,我想和你确认你的代码能找到那个窗口吗?
-
是的。我想知道为什么需要一段时间并出现连接警告
标签: c# selenium microsoft-edge