根本原因: 每当您在 selenium 驱动程序的帮助下加载某个页面时,驱动程序 脚本都会等待页面完全加载。但有时 webdriver 需要更多时间来加载页面,在这种情况下,您会在控制台中看到 TimeoutException 异常。
解决方案:当页面加载等待时间过长时,我们将等待带有页面加载策略的 DOMContentLoaded 事件。这种页面加载策略称为Eager。可用的所有 3 种页面加载策略的小定义。
1.正常:此策略导致 Selenium 等待整个页面加载(html 内容和子资源下载并解析)。
2。急切: 这个策略导致 Selenium 等待 DOMContentLoaded 事件(仅下载和解析 html 内容)。
3. none : 这个策略导致 Selenium 在初始页面内容被完全接收(html 内容下载)后立即返回。
注意:默认情况下,当 Selenium 加载页面时,它遵循正常的 pageLoadStrategy。
代码 sn-p 不使用页面加载策略(或默认情况下由 selenium 使用的 Normal)
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
控制台输出:
启动 ChromeDriver 80.0.3987.16
(320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185})
在端口 41540 上只允许本地连接。请保护端口
ChromeDriver 和相关测试框架使用它来防止访问
恶意代码。 2020 年 2 月 11 日 10:22:12
org.openqa.selenium.remote.ProtocolHandshake createSession 信息:
检测到的方言:W3C [1581412933.937][SEVERE]:接收超时
来自渲染器的消息:0.100 [1581412934.066][SEVERE]:超时
从渲染器接收消息:0.100 [1581412934.168][SEVERE]:定时
从渲染器接收消息:0.100 [1581412934.360][SEVERE]:
从渲染器接收消息超时:0.100
[1581412934.461][严重]:从渲染器接收消息超时:
0.100 [1581412934.618][SEVERE]:从渲染器接收消息超时:0.100 [1581412934.719][SEVERE]:接收消息超时
来自渲染器:0.100 [1581412934.820][SEVERE]:接收超时
来自渲染器的消息:0.100 [1581412934.922][SEVERE]:超时
从渲染器接收消息:0.100 [1581412935.097][SEVERE]:定时
out 从渲染器接收消息:0.100 21
使用 PageLoad 策略 - 渴望 - 代码片段:
System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();
控制台输出:
启动 ChromeDriver 80.0.3987.16
(320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185})
在端口 1175 上只允许本地连接。请保护端口
ChromeDriver 和相关测试框架使用它来防止访问
恶意代码。 2020 年 2 月 11 日 10:29:05
org.openqa.selenium.remote.ProtocolHandshake createSession 信息:
检测到的方言:W3C 21