java - 页面加载需要超过 60 秒才能加载,但设置 pageloadtimout 或显式等待不会导致脚本等待所需的时间
问题描述
我正在使用 selenium 4 模拟具有 3G 功能的网站,并且从一个页面加载到另一个页面需要超过 60 秒,这是默认超时。我将页面加载超时覆盖为 120 秒。但是我得到了异常 org.openqa.selenium.remote.UnreachableBrowserException: 与远程浏览器通信时出错。它可能已经死亡错误。
因此,这意味着退出被测浏览器的时间不超过 60 秒。
即使给出明确的等待也无济于事,因为它没有在课堂上的下一行代码继续前进。
脚本一直执行到 Sign in 代码行。当页面仅在显式等待行上导航时会发生问题
System.setProperty("webdriver.chrome.driver","/Downloads/chromedriver-2");
ChromeDriver driver=new ChromeDriver();
DevTools devTools = driver.getDevTools();
devTools.createSession();
devTools.send(Network.emulateNetworkConditions(
false,
20,
4000,
5000,
Optional.of(ConnectionType.CELLULAR3G)
));
driver.manage().timeouts().pageLoadTimeout(120,TimeUnit.SECONDS);
driver.get("https://www.youtube.com/feed/library");
driver.findElement(By.xpath("//div[@id='button']//yt-formatted-string[contains(text(),'Sign in')]")).click();
WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(120));
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//input[@type='email']")));
driver.findElement(By.xpath("//input[@type='email']")).sendKeys("check");
driver.quit();
如何使页面之间的导航具有预定义的等待时间或如何使其处于定义的显式超时之下?如何解决这个问题以获得可靠的解决方案?编辑:在下面建议后更改了代码
解决方案
您将隐式和显式 Selenium 等待混合在一起。
强烈不建议这样做,这会导致问题。
在这种情况下等待的实际行为并不像您期望的那样。
有关详细说明,请参阅此处、此处、此处和处理此问题的其他主题。
代替
driver.findElement(By.xpath("//div[@id='button']//yt-formatted-string[contains(text(),'Sign in')]")).click();
尝试这个:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='button']//yt-formatted-string[contains(text(),'Sign in')]"))).click();
当然你应该把
WebDriverWait wait=new WebDriverWait(driver, Duration.ofSeconds(120));
在那条线之前。通常我们在实例化驱动程序后立即定义它。此外,您也应该使用电子邮件输入
来代替。
像这样:presenceOfElementLocated
visibilityOfElementLocated
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@type='email']"))).sendKeys("check");
推荐阅读
- swift - 在 Flutter 中包含原生 SDK(适用于 IOS 和 Android)
- python - 在本地构建通过,但在 Travis 上失败
- python - 使用 R/Python 编写指数聚合函数
- xpages - 如何更改新文档的 xpage 表单?
- javascript - 一个函数在 Javascript (AJAX) 中等待另一个函数
- scala - ReactiveMongo 是否完全处理扩展的 JSON 到 BSON 的转换?
- javascript - firebase 推送通知 onMessage 有效负载在 php 中不起作用
- haskell - 输出帕斯卡三角形
- go - 以编程方式在 gin 上下文中设置 url 参数以进行测试
- java - 为什么播放声音的活动会干扰用户界面?