find元素返回空字符串。使用XPath contains,Text()

时间:2018-07-31 18:24:32

标签: c# html selenium selenium-webdriver xpath

断言失败,因为性别和日期返回false.IwebElement返回一个元素,但是当我在其中打印文本时,结果是一个空字符串。这仅在性别和日期其余都给出正确结果的情况下发生。 >

代码

 IWebElement actualname = BrowserHelper.WebDriver.FindElement(By.XPath("//a[contains(text(),'"+ name+"')]"));
            Console.Write(actualname.Text);
            IWebElement actualIdentifier = BrowserHelper.WebDriver.FindElement(By.XPath("//td[contains(text(),'"+ Identifier+"')]"));
            Console.Write(actualIdentifier.Text);
            IWebElement actualGender = BrowserHelper.WebDriver.FindElement(By.XPath("//td[contains(text(),'"+ Gender+"')]"));
             Console.Write(actualGender.Text);
            IWebElement actualDateofBirth = BrowserHelper.WebDriver.FindElement(By.XPath("//td[contains(text(),'"+ DateofBirth+"')]"));
            Console.Write(actualDateofBirth.Text);
            IWebElement actualAddress = BrowserHelper.WebDriver.FindElement(By.XPath("//td[contains(text(),'"+ Address+"')]"));
            Console.Write(actualAddress.Text);

            Assert.IsTrue((actualname.Displayed) && (actualIdentifier.Displayed) && (actualGender.Displayed) && (actualDateofBirth.Displayed) && (actualAddress.Displayed), "Incorrect out put displayed for patient query");

HTML :-

<tbody _ngcontent-c32="" style="max-height: 20vh;">
            <!----><tr _ngcontent-c32="">
              <td _ngcontent-c32="" style="text-align:center;vertical-align:middle;width:5em">
                <input _ngcontent-c32="" type="checkbox" id="0_checkbox">
              </td>
              <td _ngcontent-c32="" style="vertical-align:middle">
                <!----><span _ngcontent-c32="" class="fa fa-plus"></span>
                <a _ngcontent-c32="" href="javascript:void(0)">Braden Dunthorn</a>
              </td>
              <td _ngcontent-c32="" style="vertical-align:middle">Tribal ID: 49963093</td>
              <td _ngcontent-c32="" style="vertical-align:middle">M</td>
              <td _ngcontent-c32="" style="vertical-align:middle">12/21/1990</td>
              <td _ngcontent-c32="" style="vertical-align:middle">7 Carioca , Grenville, MD, 29605</td>
              <!---->
            </tr><tr _ngcontent-c32="">
              <td _ngcontent-c32="" style="text-align:center;vertical-align:middle;width:5em">

4 个答案:

答案 0 :(得分:0)

一个盲目的猜测,但根据我的经验判断,也许这两个字段比其他字段加载稍后有一个原因(例如,延迟加载?)。考虑设置1秒的等待时间(我知道等待时间相当长,但是在找到可行的方法后,您总是可以将其降低)。

扩大评论范围,我会尝试这样的操作(伪代码):

new Thread(()=>{
    Thread.Sleep(1000);
    IWebElement actualGender = BrowserHelper.WebDriver.FindElement(By.XPath("//td[contains(text(),'"+ Gender+"')]"));
    Console.Write(actualGender.Text);
    //put a breakpoint here to look at the value received
}).Start();

最后一次尝试:尝试获取所有td个元素BrowserHelper.WebDriver.FindElements(By.XPath("//td"))。性别元素是否在此列表中?

答案 1 :(得分:0)

您是否需要按文本搜索?

因为在这里您要按包含文本'M'的元素进行搜索

//td[contains(text(),'"+ Gender+"')]"

这将返回两个元素,因为它们都包含文本“ M”

<td _ngcontent-c32="" style="vertical-align:middle">M</td>
<td _ngcontent-c32="" style="vertical-align:middle">7 Carioca , Grenville, MD, 29605</td>

我建议更改您的方法以使用其他定位器(我认为xpath轴会有所帮助)。如果您知道一个元素说出id和性别的位置,那么dob是静态的,那么xpath轴是最好的方法。

答案 2 :(得分:0)

对于不匹配的 Gender DateofBirth XPath ,可以使用以下解决方案:

  • 性别

    IWebElement actualGender = BrowserHelper.WebDriver.FindElement(By.XPath("//td[normalize-space()='" + Gender + "']"));
    
  • 出生日期

    IWebElement actualDateofBirth = BrowserHelper.WebDriver.FindElement(By.XPath("//td[normalize-space()='" + DateofBirth + "']"));
    

答案 3 :(得分:0)

您可以尝试获取innerText属性以获取所需的文本,如下所示:

IWebElement actualDateofBirth = BrowserHelper.WebDriver.FindElement(By.XPath("//td[contains(text(),'"+ DateofBirth+"')]"));
Console.Write(actualDateofBirth.GetAttribute("innerText"));

让我知道它是否对您有用。