2014-11-14 2 views
1

Я пытаюсь нажать кнопку входа (Đăng nhậ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; 
    } 
+0

'driver.FindElement (By.XPath (" // a [@href = '# loginform'] ")). Click();' должен работать. Что делать, если вы сначала будете ждать его: 'wait.Until (ExpectedConditions.ElementExists (By.XPath (" // a [@href = '# loginform'] ")). Click();'? – alecxe

+0

спасибо, но это doesn не работает, странно. Редко это проявляется, просто не знаю, почему –

+0

что вы пробуете в другом браузере? – alecxe

ответ

1

Есть 2 проблемы.

1- Перед тем, как перейти на страницу форума, вы попадаете на страницу форума, когда вы переходите на сайт. Ниже изображение для этого:

enter image description here

Таким образом, вы должны нажать на кнопку, которая выделена выше первой. И затем, после того, как вы сможете перейти на страницу форума.

2- Ваша кнопка, безусловно, получает щелчок, но поскольку веб-страница не загружена должным образом, действие click не продолжается.

Следовательно, вам нужно подождать, пока какой-либо элемент загрузится, когда страница будет загружена должным образом.

Ниже кода поможет вам: -

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

...

Вы можете продолжить остальной тогда.

+0

Я уверен, что OP заметил бы, что нет кнопки входа в систему показано в браузере :) – alecxe

+0

@alecxe: True .. Мой плохой. Иногда я переусердствовал. :) Я отредактировал код выше, принимая во внимание это и новообретенную озабоченность. Это отлично работает как в FF, так и в Chrome, когда я сформулировал то же самое в «SeleniumWebdriver-Java». – Subh