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