断言失败,因为性别和日期返回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">
答案 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"));
让我知道它是否对您有用。