WebDriver:通过单击元素显式等待不起作用

时间:2017-02-22 20:24:42

标签: c# selenium webdriver nunit

隐式等待的代码效果很好。但我读了有关等待和理解的信息,我需要在我的项目中明确地等待。这就是我尝试用它实现我的测试项目的原因。 当我的alhorithm等步骤单击按钮时,我有错误:http://joxi.ru/BA0GMyDhnY0n2y 请帮助我。

基类:

using NUnit.Framework;
using System;
using LinkedinAddContacts.Pages;
using LinkedinAddContacts.TestData;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

namespace LinkedinAddContacts
{
    [TestFixture]
    public class TestClass
    {
        private IWebDriver webDriver;
        private WebDriverWait waitDriver;

        [SetUp]
        public void InitializeBrowser()
        {
            webDriver = new ChromeDriver();
            waitDriver = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10));
            webDriver.Manage().Window.Maximize();
            webDriver.Manage().Timeouts().PageLoad =  TimeSpan.FromSeconds(30);
            webDriver.Navigate().GoToUrl("https://www.linkedin.com/");
        }
        [Test]
        public void TestMethod()
        {
            Authorization authorizationData = new Authorization();
            StartPage objStartPage = new StartPage(waitDriver);
            NetworkPage objNetworkPage = new NetworkPage(waitDriver);

            objStartPage.EntrySystem(authorizationData);
            objNetworkPage.ConnectPeople();
        }

        [TearDown]
        public void CloseBrowser()
        {
            webDriver.Quit();
        }
    }
}

中学课程:

using NUnit.Framework;
using LinkedinAddContacts.TestData;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;

namespace LinkedinAddContacts.Pages
{
    public class StartPage
    {
      //  private IWebDriver webDriver;
        private WebDriverWait waitDriver;
        #region Objects

        public StartPage(WebDriverWait waitDriver)
        {
            this.waitDriver = waitDriver;
        }

        private IWebElement EmailInput
        {
            get
            {
                return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("session_key")));
                //return webDriver.FindElement(By.Name("session_key"));
            }
        }

        private IWebElement PasswordInput
        {
            get
            {
                return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("session_password")));
               // return webDriver.FindElement(By.Name("session_password"));
            }
        }

        private IWebElement LoginButton
        {
            get
            {
                return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("login-submit")));
                //return webDriver.FindElement(By.Id("login-submit"));
            }
        }

        private IWebElement RegistrationForm
        {
            get
            {
                return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Id("regForm")));
            //    return webDriver.FindElement(By.Id("regForm"));
            }
        }
        #endregion
        #region Methods  
        public void CloseRegistrationForm()
        {
            IJavaScriptExecutor js = waitDriver as IJavaScriptExecutor;
            js.ExecuteScript("document.getElementById('regForm').style.display = 'none';");
            //  ((IJavascriptExecutor)driver).executeScript("scroll(0,400)");

        }


        public void EntrySystem(Authorization authorizationData)
        {
           // CloseRegistrationForm();
            EmailInput.SendKeys(authorizationData.Email);
            PasswordInput.SendKeys(authorizationData.Password);
            LoginButton.Click();
        }
        #endregion
    }
}

错误:

 public void EntrySystem(Authorization authorizationData)
    {
       // CloseRegistrationForm();
        EmailInput.SendKeys(authorizationData.Email);
        PasswordInput.SendKeys(authorizationData.Password);
        LoginButton.Click();
    }

2 个答案:

答案 0 :(得分:0)

当我理解正确时,您的代码会在此行崩溃:

return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("login-submit")));

现在,看一下linkedIn的起始页,可以看出login-submit按钮没有定义name属性,但你可以使用它的id。

<input tabindex="1" id="login-submit" class="login submit-button" type="submit" value="Einloggen">

因此,您应该使用By.id()代替By.name()

答案 1 :(得分:0)

请注意您使用的是哪种网络驱动程序。

首先,正如@Robert所说,只要你可以使用Id,它就更容易找到。

其次,我认为LoginButton.Click()不起作用。我有铬驱动器这样的问题。更改页面比例(缩放)时,Click方法无法正常工作,或者单击页面上的其他位置。

我建议您使用SendKeys进行任何点击操作。 就像这样:

LoginButton.SendKeys(Keys.Enter);// or Keys.Return

永远不要使用Click方法