我正在尝试自动化一个场景,我将登录gmail网站(我的帐户)并点击特定的电子邮件(我们自己的网站)来确认电子邮件已发送但我的问题是gmail有时需要超过5分钟加载完成因为这个元素没有加载,当我尝试点击通过CSS我的测试用例失败。 Gmail加载图标会在3-5分钟后停止。
驱动程序初始化代码:
ChromeOptions options = new ChromeOptions();
options.AddArgument("-incognito");
options.AddArgument("--disable-extensions");
DesiredCapabilities capabilites = DesiredCapabilities.Chrome();
capabilites.SetCapability(ChromeOptions.Capability, options);
driver = new ChromeDriver();
driver.Manage().Window.Maximize();
添加力等待
System.Threading.Thread.Sleep(30000);
testingdriver.Navigate().GoToUrl(gmail);
System.Threading.Thread.Sleep(30000);
testingdriver.Navigate().GoToUrl(gmail);
System.Threading.Thread.Sleep(30000);
然后点击元素:
IWebElement firstEmailOpening = testingdriver.FindElement(By.CssSelector("tr.zA:nth-child(1)"));
firstEmailOpening.Click();
答案 0 :(得分:0)
这个漏洞是噩梦,我强烈建议你反对这种使用webdriver登录gmail的方法。相反,您可以使用一些库来访问您的Gmail帐户,有关详细信息,请参阅here。
答案 1 :(得分:0)
使用Implicit wait
赞 -
driver.Navigate().GoToUrl(gmail);
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(60));
建议不要使用Thread.Sleep(30000);
在这种情况下,假设您提到等待30秒,但您的元素在2秒内可见。它会等待28秒。它会使你的脚本变慢。
如果您遇到同样的问题,请使用ExplicitWait
new WebDriverWait(driver, TimeSpan.FromSeconds(45)).Until(ExpectedConditions.ElementExists(By.CssSelector("tr.zA:nth-child(1)")));
driver.FindElement(By.CssSelector("tr.zA:nth-child(1)")).Click();