Selenium.WebElement.Text 使用 C# 返回空白

Selenium.WebElement.Text is returning blank using C#

我目前正在尝试在完成表格后从自动测试网站获取一些打印文本。提交表单后,returned 值会在屏幕上显示给用户,但由于某种原因,我无法使用 Selenium 的 WebElement 获得 4 个文本值中的 2 个,我尝试使用 .TextGetAttribute("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 AddressPermananet 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"));

这应该有助于缩小范围并找到您要查找的元素。