我正在尝试使用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();
}
答案 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");
这将减慢按键速度,并解决按键发送太快的问题。