如何从Selenium C中的div元素中提取OrderID#

时间:2017-06-27 15:23:33

标签: c# regex selenium xpath

我需要从div元素中提取OrderID,以便使用C#进行selenium测试。以下是我的代码:

    public static string GetOrderId(IWebDriver instance)
    {
       var orderIdText = instance.FindElement(By.XPath("//*
       [@id='contentArea']/div[1]/div/div/div[1]")).Text;            
       //Need to extract OrderID from the orderIdText.
       return orderId;
}

div元素是这样的:

<div>Thank you for requesting a record through the Record Request service. Your order number for this transaction is KR589497.
     <p>Your credit card has been charged ............. </p>
</div>

我需要OrderId = KR589497并返回此值。

3 个答案:

答案 0 :(得分:0)

抓住整个元素并将其命名为OrderIdText,然后尝试以下内容:

var OrderId = OrderIdText.substring(OrderIdText.indexOf("is"), OrderIdText.indexOf("."));

你很可能不得不用一两个字符修改上面的内容,但应该是一个好的开始。

答案 1 :(得分:0)

计算订单ID的正确语法是:

var orderID= orderIdText.substring(orderIdText.lastIndexOf("is")+3, orderIdText.lastIndexOf(".",orderIdText.indexOf("\r")))

答案 2 :(得分:0)

编辑:根据OP的评论,您匹配的字符串可以有不同的格式:

"Your **order** number for this transaction is KR589497."
"Your **confirmation** number for this transaction is MT289555."

由于您只对&#34; OrderID&#34;感兴趣,要从两个字符串创建正则表达式,您希望尽可能采用&#34; union&#34;这些字符串:

" number for this transaction is {OrderID}."

这也意味着&#34;更小&#34;两个字符串的并集也会导致匹配:

"transaction is {OrderID}."

以下是使用正则表达式的解决方案:

Regex regex = new Regex(@" number for this transaction is ([^\.]+)\.",
    RegexOptions.Compiled);
Match match = regex.Match(orderIdText);
if (match.Success)
{
    string orderId = match.Groups[1].Value; // "KR589497"
}

正则表达式解释:

" number for this transaction is ([^\.]+)\."
  • number for this transaction is - 完全匹配字符串
  • ([^\.]+) - 匹配一个或多个字符,不包括.个字符
    • 这是orderId,您可以根据需要添加业务规则
  • \. - 完全匹配.字符