首页 > 解决方案 > 使用 Selenium 登录到 TextNow 的问题

问题描述

我正在尝试使用 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();


        }

标签: c#seleniumxpathcss-selectorswebdriverwait

解决方案


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

您的 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");

这将减慢击键速度并解决击键发送速度过快的问题。


推荐阅读