为什么当硒点击时模态窗口不显示

时间:2014-11-14 04:28:44

标签: c# selenium selenium-webdriver

我尝试点击登录按钮(Đăngnhập)以显示登录框,但无法实现。

登录框只是没有显示。

Selenium,webdriver都是最新版本

    using (IWebDriver driver = new ChromeDriver())
            {

                driver.Navigate().GoToUrl("http://sinhvienit.net/forum/");
         //       driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));

              //  driver.FindElement(By.XPath("//a[@href='#loginform']//span")).Click();
            //    driver.FindElement(By.XPath("//a[@href='#loginform']")).Click();

            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));               
            wait.Until(ExpectedConditions.ElementExists(By.XPath("//a[@href='#loginform']"))).Click();
            wait.Until(ExpectedConditions.ElementExists(By.XPath("//a[@href='#loginform']//span"))).Click();

                wait.Until(ExpectedConditions.ElementExists(By.Id("navbar_username"))); 
                wait.Until(ExpectedConditions.ElementExists(By.Id("navbar_password"))); 

          //       var loginBox= wait.Until(ElementIsClickable(By.Id("loginform"))); >> fail
                driver.Scripts().ExecuteScript("document.getElementById('navbar_username').style.display='inline';");
                driver.Scripts().ExecuteScript("document.getElementById('navbar_password').style.display='inline';");


                Console.ReadKey();
            }

C#扩展名:

 public static IJavaScriptExecutor Scripts(this IWebDriver driver)
    {
        return (IJavaScriptExecutor)driver;
    }

1 个答案:

答案 0 :(得分:1)

有2个问题。

1 - 当您导航到网站时,实际论坛页面之前会出现一个网页。以下是图像:

enter image description here

所以你必须先点击上面突出显示的按钮。然后,您将能够导航到论坛的页面。

2 - 您的按钮肯定会被点击,但由于网页未正确加载,因此点击操作不会继续。

因此,您需要等待正确加载页面时加载的某个元素。

以下代码可以帮助您: -

using (IWebDriver driver = new ChromeDriver())
            {

                driver.Navigate().GoToUrl("http://sinhvienit.net/forum/");

                driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30)); //Give the implicit wait time

               driver.FindElement(By.XPath("//button[@id='btnSubmit1']")).Click();// Clicking on the button present in prior page of forum

              //Waiting till the element that marks the page is loaded properly, is visible
              var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));  

              wait.Until(ExpectedConditions.ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='vtlai_topx']/a")));

               driver.FindElement(By.XPath("//a[@href='#loginform']")).Click();

...

然后你可以继续休息。