diff --git a/src/Orchard.Specs/Bindings/HtmlNodeExtensions.cs b/src/Orchard.Specs/Bindings/HtmlNodeExtensions.cs new file mode 100644 index 000000000..0a8b4281c --- /dev/null +++ b/src/Orchard.Specs/Bindings/HtmlNodeExtensions.cs @@ -0,0 +1,11 @@ +using HtmlAgilityPack; + +namespace Orchard.Specs.Bindings { + public static class HtmlNodeExtensions { + public static string GetOptionValue(this HtmlNode node) { + return node.Attributes.Contains("value") + ? node.GetAttributeValue("value", "") + : node.NextSibling != null && node.NextSibling.NodeType == HtmlNodeType.Text ? node.NextSibling.InnerText : ""; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Specs/Bindings/WebAppHosting.cs b/src/Orchard.Specs/Bindings/WebAppHosting.cs index 08670ec99..a261d505c 100644 --- a/src/Orchard.Specs/Bindings/WebAppHosting.cs +++ b/src/Orchard.Specs/Bindings/WebAppHosting.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.RegularExpressions; using System.Web; using Castle.Core.Logging; using HtmlAgilityPack; @@ -181,21 +182,21 @@ namespace Orchard.Specs.Bindings { Host.HostName = host; Details = Host.SendRequest(urlPath); _doc = new HtmlDocument(); - _doc.Load(new StringReader(Details.ResponseText)); + _doc.Load(new StringReader(Regex.Replace(Details.ResponseText, @">\s+<", "><"))); } [When(@"I go to ""(.*)""")] public void WhenIGoTo(string urlPath) { Details = Host.SendRequest(urlPath); _doc = new HtmlDocument(); - _doc.Load(new StringReader(Details.ResponseText)); + _doc.Load(new StringReader(Regex.Replace(Details.ResponseText, @">\s+<", "><"))); } [When(@"I follow ""([^""]*)""")] public void WhenIFollow(string linkText) { var link = _doc.DocumentNode .SelectNodes("//a") - .SingleOrDefault(elt => elt.InnerText == linkText) + .SingleOrDefault(elt => elt.InnerHtml == linkText) ?? _doc.DocumentNode .SelectSingleNode(string.Format("//a[@title='{0}']", linkText)); @@ -208,7 +209,7 @@ namespace Orchard.Specs.Bindings { public void WhenIFollow(string linkText, string hrefFilter) { var link = _doc.DocumentNode .SelectNodes("//a[@href]").Where(elt => - (elt.InnerText == linkText || + (elt.InnerHtml == linkText || (elt.Attributes["title"] != null && elt.Attributes["title"].Value == linkText)) && elt.Attributes["href"].Value.IndexOf(hrefFilter, StringComparison.OrdinalIgnoreCase) != -1).SingleOrDefault(); @@ -263,9 +264,9 @@ namespace Orchard.Specs.Bindings { break; default: if (string.Equals(input.Name, "select", StringComparison.OrdinalIgnoreCase)) { - var options = input.ChildNodes; + var options = input.Descendants("option"); foreach (var option in options) { - if (option.GetAttributeValue("value", "") == row["value"]) + if (option.GetAttributeValue("value", "") == row["value"] || (option.NextSibling.NodeType == HtmlNodeType.Text && option.NextSibling.InnerText == row["value"])) option.Attributes.Add("selected", "selected"); else if (option.Attributes.Contains("selected")) option.Attributes.Remove("selected"); @@ -286,7 +287,7 @@ namespace Orchard.Specs.Bindings { .SelectSingleNode(string.Format("(//input[@type='submit'][@value='{0}']|//button[@type='submit'][text()='{0}'])", submitText)); var form = Form.LocateAround(submit); - var urlPath = form.Start.GetAttributeValue("action", Details.UrlPath); + var urlPath = HttpUtility.HtmlDecode(form.Start.GetAttributeValue("action", Details.UrlPath)); var inputs = form.Children @@ -299,18 +300,18 @@ namespace Orchard.Specs.Bindings { // select all