使用Selenium登录到TextNow时出现问题

时间:2019-11-25 18:37:29

标签: c# selenium xpath css-selectors webdriverwait

我正在尝试使用Selenium自动化TextNow,但是当我添加用户名和密码时,出现错误“用户名或密码无效”。但是,手动手动也可以。

下面是我尝试过的代码

 static void Main(string[] args)
        {
            IWebDriver driver;

            driver = new ChromeDriver("cromepath");
            driver.Url = "https://www.textnow.com/messaging";
            driver.Manage().Window.Maximize();
            IWebElement userName = driver.FindElement(By.Id("txt-username"));//txt-password
            IWebElement password = driver.FindElement(By.Id("txt-password"));

            userName.SendKeys("username");
            password.SendKeys("password");

            IWebElement login = driver.FindElement(By.Id("btn-login"));
            login.Click();


        }

1 个答案:

答案 0 :(得分:4)

您提到您收到一个错误,指出用户名/密码无效。您确定要发送正确的凭据吗?

您的XPath在这里是正确的,因此等待元素存在是最有可能的问题  -textnow.com确实需要一分钟才能加载。您可能还想在发送密钥之前清除两个WebElements

using OpenQA.Selenium.Support.UI;


// declare wait of 15 seconds
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));

// wait for element to exist, then store it in username variable
var username = wait.Until(drv => drv.FindElement(By.Id("txt-username")));

// clear & send keys
username.Clear();
username.SendKeys("username");

可以重复相同的方法来输入密码。

如果您仍然使用户名/密码无效,并且确定使用的是正确的凭据,则可能SendKeys()发生得太快,并且击键未全部在input字段中注册。

您可以将SendKeys()包装在一种方法中以缓慢发送键,以防输入太快而导致问题:

public static void SlowlySendKeys(this IWebElement element, string text)
{
    // first clear element
    element.Clear();

    // slowly send keys, wait 100ms between each key stroke
    foreach (var c in text) {
         element.SendKeys(c);
         System.Threading.Thread.Sleep(100);
    }
}

然后,您可以致电:

username.SlowlySendKeys("username");

这将减慢按键速度,并解决按键发送太快的问题。