Selenium.WebElement.Text 使用 C# 返回空白
Selenium.WebElement.Text is returning blank using C#
我目前正在尝试在完成表格后从自动测试网站获取一些打印文本。提交表单后,returned 值会在屏幕上显示给用户,但由于某种原因,我无法使用 Selenium 的 WebElement 获得 4 个文本值中的 2 个,我尝试使用 .Text
和 GetAttribute("value")
,它们都 return 空白。然而,前 2 段文本 returned,我能够检索。请参阅下面的屏幕截图以及代码。
//然后我验证提交的表单
Constants.confirmationName = driver.FindElement(By.CssSelector("#name"));
if (Constants.confirmationName.Text == "Name:QA Automation")
{
Console.WriteLine(Constants.confirmationName.Text);
}
else
{
Console.WriteLine("We have a different name stored for you.");
}
Constants.confirmationEmail = driver.FindElement(By.CssSelector("#email"));
if (Constants.confirmationEmail.Text == "Email:automation@hotmail.com")
{
Console.WriteLine(Constants.confirmationEmail.Text);
}
else
{
Console.WriteLine("We have a different email stored for you.");
}
Thread.Sleep(2000);
//NOT WORKING
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("#currentAddress"));
Thread.Sleep(2000);
if (Constants.confirmationCurrentAddress.Text == "Current Address :Cedars 2 ")
{
Console.WriteLine(Constants.confirmationCurrentAddress.Text);
}
else
{
Console.WriteLine("We have a different current address stored for you.");
}
//NOT WORKING
Constants.confirmationPermanentAddress = driver.FindElement(By.CssSelector("#permanentAddress"));
if (Constants.confirmationPermanentAddress.Text == "Permananet Address :63 Wheat Drive")
{
Console.WriteLine(Constants.confirmationPermanentAddress.Text);
}
else
{
Console.WriteLine("We have a different permanent address stored for you.");
}
代码确认打印的名称,我可以看到它 returned,电子邮件地址也是如此,但是当前地址和永久地址都是 return 空白,我'我也尝试过增加等待时间,但无济于事。
有问题的网站是https://demoqa.com/text-box,如果您填写字段,然后单击提交,您将看到下面的打印信息。
任何帮助将不胜感激,因为它让我发疯!
在 ToolsQA Text Box 网页中点击 提交 按钮作为 全名 和 电子邮件 立即呈现在 <p>
标签内:
您可以使用 .Text 属性 提取 innerText 如下:
Constants.confirmationName = driver.FindElement(By.CssSelector("#name"));
if (Constants.confirmationName.Text == "Name:QA Automation")
{
Console.WriteLine(Constants.confirmationName.Text);
}
但是当前地址和永久地址的值不会立即在<textarea>
标签
中呈现
因此,要提取 Current Address 和 Permananet Address 的值,而不是使用 Text property you need to use GetAttribute("value") 方法,如下所示:
提取当前地址:
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("#currentAddress"));
if (Constants.confirmationCurrentAddress.GetAttribute("value") == "Current Address :Cedars 2 ")
{
Console.WriteLine(Constants.confirmationCurrentAddress.Text);
}
提取永久网地址:
Constants.confirmationPermanentAddress = driver.FindElement(By.CssSelector("#permanentAddress"));
if (Constants.confirmationPermanentAddress.GetAttribute("value") == "Permananet Address :63 Wheat Drive")
{
Console.WriteLine(Constants.confirmationPermanentAddress.Text);
}
检查 HTML 以查找共享相同 currentAddress 和 permanentAddress Id 的任何其他元素,我认为这是问题所在,因为它可能会发现与该 Id 匹配的第一个元素并且该元素没有文本(因此空字符串,无一例外)。
我觉得你的代码没问题,而且电子邮件和姓名都能正常工作这一事实表明你的代码也很好。
尝试改变这个
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("#currentAddress"));
至
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("p#currentAddress"));
这应该有助于缩小范围并找到您要查找的元素。
我目前正在尝试在完成表格后从自动测试网站获取一些打印文本。提交表单后,returned 值会在屏幕上显示给用户,但由于某种原因,我无法使用 Selenium 的 WebElement 获得 4 个文本值中的 2 个,我尝试使用 .Text
和 GetAttribute("value")
,它们都 return 空白。然而,前 2 段文本 returned,我能够检索。请参阅下面的屏幕截图以及代码。
//然后我验证提交的表单
Constants.confirmationName = driver.FindElement(By.CssSelector("#name"));
if (Constants.confirmationName.Text == "Name:QA Automation")
{
Console.WriteLine(Constants.confirmationName.Text);
}
else
{
Console.WriteLine("We have a different name stored for you.");
}
Constants.confirmationEmail = driver.FindElement(By.CssSelector("#email"));
if (Constants.confirmationEmail.Text == "Email:automation@hotmail.com")
{
Console.WriteLine(Constants.confirmationEmail.Text);
}
else
{
Console.WriteLine("We have a different email stored for you.");
}
Thread.Sleep(2000);
//NOT WORKING
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("#currentAddress"));
Thread.Sleep(2000);
if (Constants.confirmationCurrentAddress.Text == "Current Address :Cedars 2 ")
{
Console.WriteLine(Constants.confirmationCurrentAddress.Text);
}
else
{
Console.WriteLine("We have a different current address stored for you.");
}
//NOT WORKING
Constants.confirmationPermanentAddress = driver.FindElement(By.CssSelector("#permanentAddress"));
if (Constants.confirmationPermanentAddress.Text == "Permananet Address :63 Wheat Drive")
{
Console.WriteLine(Constants.confirmationPermanentAddress.Text);
}
else
{
Console.WriteLine("We have a different permanent address stored for you.");
}
代码确认打印的名称,我可以看到它 returned,电子邮件地址也是如此,但是当前地址和永久地址都是 return 空白,我'我也尝试过增加等待时间,但无济于事。
有问题的网站是https://demoqa.com/text-box,如果您填写字段,然后单击提交,您将看到下面的打印信息。
任何帮助将不胜感激,因为它让我发疯!
在 ToolsQA Text Box 网页中点击 提交 按钮作为 全名 和 电子邮件 立即呈现在 <p>
标签内:
您可以使用 .Text 属性 提取 innerText 如下:
Constants.confirmationName = driver.FindElement(By.CssSelector("#name"));
if (Constants.confirmationName.Text == "Name:QA Automation")
{
Console.WriteLine(Constants.confirmationName.Text);
}
但是当前地址和永久地址的值不会立即在<textarea>
标签
因此,要提取 Current Address 和 Permananet Address 的值,而不是使用 Text property you need to use GetAttribute("value") 方法,如下所示:
提取当前地址:
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("#currentAddress")); if (Constants.confirmationCurrentAddress.GetAttribute("value") == "Current Address :Cedars 2 ") { Console.WriteLine(Constants.confirmationCurrentAddress.Text); }
提取永久网地址:
Constants.confirmationPermanentAddress = driver.FindElement(By.CssSelector("#permanentAddress")); if (Constants.confirmationPermanentAddress.GetAttribute("value") == "Permananet Address :63 Wheat Drive") { Console.WriteLine(Constants.confirmationPermanentAddress.Text); }
检查 HTML 以查找共享相同 currentAddress 和 permanentAddress Id 的任何其他元素,我认为这是问题所在,因为它可能会发现与该 Id 匹配的第一个元素并且该元素没有文本(因此空字符串,无一例外)。
我觉得你的代码没问题,而且电子邮件和姓名都能正常工作这一事实表明你的代码也很好。
尝试改变这个
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("#currentAddress"));
至
Constants.confirmationCurrentAddress = driver.FindElement(By.CssSelector("p#currentAddress"));
这应该有助于缩小范围并找到您要查找的元素。