C# 为什么模态窗口没有';被selenium单击时不会显示

C# 为什么模态窗口没有';被selenium单击时不会显示,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我试着点击登录按钮ập) 显示登录框,但未能实现 登录框没有显示 Selenium、webdriver都是最新版本 using (IWebDriver driver = new ChromeDriver()) { driver.Navigate().GoToUrl("http://sinhvienit.net/forum/"); // driver.Manage().Timeouts().Implic

我试着点击登录按钮ậ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-当您导航到该站点时,在实际论坛页面之前会出现一个网页。以下是该项目的图片:

因此,您必须单击上面突出显示的按钮。之后,您将能够导航到论坛页面。

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();


然后可以继续使用rest。

driver.FindElement(By.XPath(“//a[@href='#loginform'])。单击()应该可以工作。如果您先等待它会怎么样:
wait.Until(ExpectedConditions.ElementExists(By.XPath(//a[@href=''loginform'])。单击()
?谢谢,但它也不起作用。奇怪。它很少出现,只是不知道你为什么要尝试不同的浏览器?是的,我用firefoxdriver尝试过,它仍然是一样的。如果你删除
隐式等待
调用-只在显式等待的情况下尝试?我很确定OP会注意到在浏览器中没有显示登录按钮浏览器:)@alecxe:True。。我的错。我有时想得太多了我在编辑上述代码时考虑到了这一点,以及其中一个新发现的问题。当我在“SeleniumWebdriver Java”中制定相同的规则时,这在FF和Chrome中都可以很好地工作。。