当前位置: 首页 > 编程语言 > C#

如何在seleniumwebdriver中等待元素加载?Share

时间:2023-04-10 19:17:13 C#

如何在seleniumwebdriver中等待元素加载?我是seleniumwebdriver的新手,正在测试一个应用程序。在我的应用程序中,我必须测试有关facebook帐户的链接。每当我单击链接时,都会出现一个弹出窗口,我必须在其中输入我的凭据。我有时能够链接,有时测试失败。我知道原因是因为加载弹出窗口和执行下一个命令需要时间,所以它找不到元素。我使用过Thread.Sleep,但我想使用隐式等待或显式等待,这始终是一种替代Thread.Sleep的好习惯。如何使用隐式等待以及在哪里使用这个命令?请指教。谢谢。publicvoidSocialFaceBook(){stringcurrentWindow=driver.CurrentWindowHandle;PopupWindowFinderfinder=newPopupWindowFinder(driver);stringfacebookWindow=finder.Click(driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[3]/a")));//切换到FaceBook窗口driver.SwitchTo().Window(facebookWindow);系统.Threading.Thread.Sleep(3000);//链接//电子邮件地址IWebElementfaceBookLinkEmail=driver.FindElement(By.Id("email"));faceBookLinkEmail.SendKeys(SocialFaceBookEmail);//密码IWebElementfaceBookLinkPass=driver.FindElement(By.Id("pass"));faceBookLinkPass.SendKeys(SocialFaceBookPass);//登录按钮IWebElementfaceBookLinkLogin=driver.FindElement(By.XPath("//input[@id='u_0_1']"));faceBookLinkLogin.Click();//切换到主窗口driver.SwitchTo().Window(currentWindow);系统.Threading.Thread.Sleep(3000);//同步IWebElementfaceBookSync=driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[2]/a"));faceBookSync.Click();//取消链接IWebElementfaceBookUnLink=driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[1]/a"));faceBookUnLink.Click();}有时它找不到登录详细信息,因为弹出窗口没有正确加载,有时它找不到同步按钮,因为facebook帐户需要时间链接,请告知。WebDriverWaitwait=newWebDriverWait(driver,30);wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("locator")));如果元素是在执行元素之前找到,它将等待元素定位长达30秒....我不得不从@Vicky的回答中更改一些小东西,但这是我让它工作的最佳方式。公共staticvoidWaitForElementLoad(Byby,inttimeoutInSeconds){if(timeoutInSeconds>0){WebDriverWaitwait=newWebDriverWait(webDriver,TimeSpan.FromSeconds(timeoutInSeconds));wait.Until(ExpectedConditions.ElementIsVisible(by));}}我打电话这个:MyClass.WaitForElementLoad(By.CssSelector("div#div1divstronga"),10);我曾经写过一个函数来检测每秒存在的元素。如果找到继续,否则抛出超时错误。但是在那个函数中我仍然使用Thread.Sleep。期待其他好的解决方案。我使用ExpectedCondition.visibilityOf(element)而不是线程休眠隐式等待-识别对象的最大等待时间,它将每500毫秒识别一次对象。如果它不能在最长时间内识别对象,它会抛出NoSuchElementException。显式等待-ajax页面加载服务于相同的目的。最大等待时间同thread.sleep项目写一个方法:publicstaticvoidWaitForElementPresentBy(Byby){try{Wait.Until(ExpectedConditions.ElementIsVisible(by));}catch(TimeoutExceptionte){Assert.Fail("带有选择器{0}的元素没有出现。异常是:n{1}",by,te.ToString());}}wait应该已经被定义了。以上就是C#学习教程:seleniumwebdriver中如何等待元素加载?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: