C# 获取属性/CSS/property

C# 获取属性/CSS/property,c#,selenium,selenium-webdriver,webdriver,C#,Selenium,Selenium Webdriver,Webdriver,我有一个场景,selenium需要打开登录表单,在页面加载后立即单击“登录”,而不输入任何内容。未填充任何内容时,字段均为: 周围将亮显为红色 字段名称颜色更改为红色 “必需”字符串出现在字段底部 我已经运行了整个测试,字段已经定位,但我不知道如何正确地检查(那些点) 只有一个字段的DOM(对于非红色表单)非常难看: <div class="form-row" xpath="1"> <div class="jss98 jss99 primary input outli

我有一个场景,selenium需要打开登录表单,在页面加载后立即单击“登录”,而不输入任何内容。未填充任何内容时,字段均为:

  • 周围将亮显为红色
  • 字段名称颜色更改为红色
  • “必需”字符串出现在字段底部
我已经运行了整个测试,字段已经定位,但我不知道如何正确地检查(那些点)

只有一个字段的DOM(对于非红色表单)非常难看:

<div class="form-row" xpath="1">
   <div class="jss98 jss99 primary input outlined-input" input="[object Object]" meta="[object Object]">
      <label class="jss113 jss102 jss107 jss110 jss112" data-shrink="false" for="email">Email</label>
      <div class="jss133 jss120 jss134">
         <fieldset aria-hidden="true" class="jss150 jss127" style="padding-left: 29.25px;">
            <legend class="jss151" style="width: 0.01px;"><span>​</span></legend>
         </fieldset>
         <input aria-invalid="false" class="jss143 jss128" id="email" type="text" value="" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAjZJREFUWAntV7vKIlEMPt5dOy/NID9WIoKKCAsiWIqFFmLra4j2IoKPsL24YKWFD7Ai+ASClY2yNioWgjckfzLrCeN46XSKNXDmJPkyyWdOZnCE+CdfuP3G9RcXvHhRDapFNVUhZYXr1YX1+anmlwUvv3D9xPVu+YEFFRNeqCXKu6tf6i2IALXGMDEbVvlS+EPg/+tAuVwWmUyGR+/tHSgUCiKdThtHgCs/egosFouIRCIiEAjoY9n2+XwikUgIp9PJPq1itVpFLBYTfr9f636o8zs6GAzCeDwGKb1eD1wuF+OYARqNBpzPZzVkuVxCNpu9wuPxOEynU5kCWq0W2Gw2jhkOh1Cr1dgmVmyMRiO+USrNZpNxPD/p5n29XoPb7VZjTCYTTCYTxqRSqVQ4h54AD6HX6xXJZPKmTblcjn35fJ51qWBxkUqlVBM7KEKhkIR41+Zg50VhAofDQSBjPS72+z37tDo7Udntdqopdy1G+qP7CGMC2+1WdLtd8l0JniHb7Xb7hiSet8CjU2Nms5kYDAYcLxVtDunT7nw+Ho8HOp0OYDdgs9lAvV4Hs9nMON4EpVIJ5vO5Oog0M+Fw+ApXFAX6/T4cj0dYrVZQrVavcP0MEJGrALJpammg7mHS53A4nuJ2u/0uridgxYQ3cjqdbnx6B83MM8EOPIMZ4xlgjwHK3VYhj5f4i8UiRKNRzv35S2b4DHwIUAcWBjx5suSCCPyRlgG7WtvQj1P5o4kEfTK//fP8G/4x2UymA12DAAAAAElFTkSuQmCC&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;">
      </div>
   </div>
</div>

电子邮件
​
DOM带有“红色”:

<div class="form-row" xpath="1">
   <div class="jss98 jss99 primary input outlined-input error " input="[object Object]" meta="[object Object]" aria-describedby="email-helper-text">
      <label class="jss113 jss116 jss105 jss102 jss107 jss110 jss112" data-shrink="false" for="email">Email</label>
      <div class="jss133 jss120 jss139 jss125 jss134">
         <fieldset aria-hidden="true" class="jss150 jss127" style="padding-left: 29.25px;">
            <legend class="jss151" style="width: 0.01px;"><span>​</span></legend>
         </fieldset>
         <input aria-invalid="true" class="jss143 jss128" id="email" type="text" value="" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAmJJREFUWAntV7uKIkEUvbYGM4KID3wEIgjKRLLpKGLgFwiCfslGhkb7IbLgAzE1GhMxWxRRBEEwmEgDERWfW6fXuttq60a2wU6B1qlzb9U5fatsKROJVigUArvd7oeAyePx6Af3qGYymT7F2h8Wi+V7Pp+fmE7iv4Sw81GieusKIzNh4puCJzdaHIagCW1F4KSeQ4O4pPLoPb/3INBGBZ7avgz8fxWIxWIUCoX43Blegbe3NwoGg88zwMoncFUB8Yokj8dDdrv9MpfHVquV/H4/iVcpc1qgKAp5vV6y2WxaWhefreB0OimXy6kGkD0YDKhSqdB2u+XJqVSK4vE4QWS5XKrx0WjEcZ/PR9lslhwOh8p1Oh2q1Wp0OBw4RwvOKpBOp1kcSdivZPLvmxrjRCKhiiOOSmQyGXp5ecFQbRhLcRDRaJTe39//BHW+2cDr6ysFAoGrlEgkwpwWS1I7z+VykdvtliHuw+Ew40vABvb7Pf6hLuMk/rGY02ImBZC8dqv04lpOYjaw2WzUPZcB2WMPZet2u1cmZ7MZTSYTNWU+n9N4PJbp3GvXYPIE2ADG9Xqder2e+kTr9ZqazSa1222eA6FqtUoQwqHCuFgscgWQWC6XaTgcEiqKQ9poNOiegbNfwWq1olKppB6yW6cWVcDHbDarIuzuBBaLhWrqVvwy/6wCMnhLXMbR4wnvtX/F5VxdAzJoRH+2BUYItlotmk6nLGW4gX6/z+IAT9+CLwPPr8DprnZ2MIwaQBsV+DBKUEfnQ8EtFRdFneBDKWhCW8EVGbdUQfxESR6qKhaHBrSgCe3fbLTpPlS70M0AAAAASUVORK5CYII=&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%;">
      </div>
      <p class="jss159 jss163 jss160" id="email-helper-text">Required</p>
   </div>
</div>

电子邮件
​

必需

我们可以看到:“class=“jss98 jss99主输入概述输入错误”/aria descripeby=“email helper text”,input aria invalid=“true”,最后新段落添加了文本“Required”

我现在想做的是在单击之前检查字段,检查上面列出的内容是否为空,然后单击并检查以前不存在的元素现在是否存在

有人能解释一下标题中的这三种方法有什么不同吗

我想获取div中类的值(class=“jss98 jss99 primary input outlined input”)。有人能告诉我如何获取吗


我正在用C#

编写,基本上可以使用XPath检查class属性的内容,如下所示:

"//div[contains(@class, 'error')]"

这应该在提交前找不到任何内容,并在提交后找到彩色元素。

您要做的第一件事是将前后HTML放在一个差异引擎中,以查看发生了什么变化。(如果您还没有变化,您可以在网上找到一个简单的元素。)我看到了三件事(我认为非常重要):

  • 类“error”被添加到外部
    DIV
  • INPUT
    上的“aria invalid”属性从
    false
    更改为
    true
  • P
    标记添加了id=“email helper text”并包含“Required”
  • 之前和之后的测试是这样的…您执行一个
    .FindElements()
    (复数)并查看之前的计数是否为0,之后的计数是否为1

    下面是一些代码示例

    例1

    By errorClassLocator = By.CssSelector("div.outlined-input.error");
    
    // before
    Assert.Zero(Driver.FindElements(errorClassLocator).Count, "Verify that 'error' class is not present");
    
    // after
    Assert.NotZero(Driver.FindElements(errorClassLocator).Count, "Verify that 'error' class is present");
    
    例2

    By ariaInvalidLocator = By.CssSelector("input#email[aria-invalid='true']");
    
    // before
    Assert.Zero(Driver.FindElements(ariaInvalidLocator).Count, "Verify that 'aria-invalid' attribute value of 'true' is not present");
    
    // after
    Assert.NotZero(Driver.FindElements(ariaInvalidLocator).Count, "Verify that 'aria-invalid' attribute is true");
    
    注意:您也可以使用两个定位器…查找之前的aria invalid='false',而不是'true'不存在。另一个选项是查找元素,然后提取'aria invalid'的值,并将其与'true'或'false'进行比较

    例3

    By requiredLocator = By.Id("email-helper-text");
    
    // before
    Assert.Zero(Driver.FindElements(requiredLocator).Count, "Verify that the 'email-helper-text' P is not present");
    
    // after
    Assert.NotZero(Driver.FindElements(requiredLocator).Count, "Verify that the 'email-helper-text' P is present");
    Assert.AreEqual("Required", Driver.FindElement(requiredLocator).Text, "Verify that 'Required' text is present");
    

    注意:使用
    .FindElement()
    对于before情况至关重要,因为如果使用
    .FindElement()
    如果找不到元素,它将抛出。如果元素未按预期出现,它对后一种情况也很有用。您将得到一个失败的断言,其中有一条关于缺少什么的明确消息。

    如果我尝试在DOM中找到它,它将不会返回这样的元素异常y、 请参阅:SO的期望是,用户提出问题时不仅要进行研究以回答他们自己的问题,还要分享研究、代码尝试和结果。这表明您花了时间尝试帮助自己,这可以避免我们重复显而易见的答案,最重要的是,它可以帮助您获得更具体、更准确的答案黎凡特答案!另请参阅:感谢您提供了这样一个扩展的答案,我们将对其进行测试,并让您了解结果:)