如何在selenium webdriver中等待元素加载?

use*_*772 6 c# unit-testing wait selenium-webdriver

我是selenium webdriver的新手,正在测试一个应用程序.在我的应用程序中,我必须测试关于Facebook帐户的链接.每当我点击链接时,弹出窗口都会显示在我必须输入凭据的位置.我有时能够链接,有时测试失败.我知道原因是因为加载弹出窗口需要时间并且执行下一个命令因此无法找到该元素.我使用过Thread.Sleep,但是我想使用隐式等待或显式等待,这总是一个很好的做法,而不是Thread.Sleep.如何使用隐式等待以及在哪里使用该命令?请指教.谢谢.

 public void SocialFaceBook()
    {           
        string currentWindow = driver.CurrentWindowHandle;
        PopupWindowFinder finder = new PopupWindowFinder(driver);
        string facebookWindow = finder.Click(driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[3]/a")));
        // Switch To FaceBook Window
        driver.SwitchTo().Window(facebookWindow);
        System.Threading.Thread.Sleep(3000);

        // Link
        // Email Address
        IWebElement faceBookLinkEmail = driver.FindElement(By.Id("email"));
        faceBookLinkEmail.SendKeys(SocialFaceBookEmail);

        // Password
        IWebElement faceBookLinkPass = driver.FindElement(By.Id("pass"));
        faceBookLinkPass.SendKeys(SocialFaceBookPass);

        // Log In Button
        IWebElement faceBookLinkLogin = driver.FindElement(By.XPath("//input[@id='u_0_1']"));
        faceBookLinkLogin.Click();

        // Switch To Main Window
        driver.SwitchTo().Window(currentWindow);
        System.Threading.Thread.Sleep(3000);

        // Sync            
        IWebElement faceBookSync = driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[2]/a"));
        faceBookSync.Click();

        // Unlink
        IWebElement faceBookUnLink = driver.FindElement(By.XPath("//div[@id='panelFacebook']/div[2]/div[3]/div[1]/a"));
        faceBookUnLink.Click();
    }
Run Code Online (Sandbox Code Playgroud)

有时它无法找到登录详细信息,因为弹出窗口未正确加载,有时无法找到同步按钮,因为Facebook帐户需要时间链接.请指教.

Vic*_*cky 19

WebDriverWait wait = new WebDriverWait(driver,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id( "定位器")));

如果在执行之前找到该元素,它将等待元素定位最多30秒....


小智 0

我曾经写过一个函数来每秒检测一个元素是否存在。如果找到则继续,否则抛出超时错误。但在该函数中我仍然使用 Thread.Sleep。

期待其他好的解决方案。