C# HTML字符串未得到验证

C# HTML字符串未得到验证,c#,watin,C#,Watin,这些空格不是我在HTML端添加的,我无法编辑HTML 我想知道我的比较字符串应该是什么? 我正在使用watin自动化网站测试过程,但我无法遇到只有一个按钮。每一个按钮都有效 watin按名称/值/id等搜索内容,效果很好,但当我看到需要单击的submit按钮的值时,它有一些中断&nsbp,因此我认为它们在发挥作用 以下是html: <span class='button'><input type="submit" value="&nbsp;&nbsp;&

这些空格不是我在HTML端添加的,我无法编辑HTML 我想知道我的比较字符串应该是什么?

我正在使用watin自动化网站测试过程,但我无法遇到只有一个按钮。每一个按钮都有效

watin按名称/值/id等搜索内容,效果很好,但当我看到需要单击的submit按钮的值时,它有一些中断&nsbp,因此我认为它们在发挥作用

以下是html:

<span class='button'><input type="submit" value="&nbsp;&nbsp;&nbsp;Login&nbsp;&nbsp;&nbsp;" /></span>&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span class='button'><input type="button" value="&nbsp;&nbsp;&nbsp;Back&nbsp;&nbsp;&nbsp;" onclick="history.back(-1)" /></span> 
能做些什么

--建议--(即太大,无法发表评论)

您不应该使用
向提交按钮添加空格。相反,您应该使用CSS根据自己的喜好设置按钮的样式。所以你会有这样的想法:

input[type=button] {
    padding:10px;
    min-width: 150px;
}
同样,这可以消除您在选择按钮时遇到的任何问题。这可能是编码与watin冲突的问题,因此,使用CSS进行此操作将使调试问题更清晰、更容易

编辑: 您是否尝试过按ID而不是按值搜索?ID在页面上应该是唯一的,所以如果它不能通过这些方法找到它,那么这是一个可以排除的问题。也可能是因为你正在搜索一个按钮。
不同

编辑2:即使问题是由于编码中断造成的,我仍然建议您重置该按钮以重置文本(删除所有非中断空格)并为其附加id/名称。原因是出于国际化目的-如果出于某种原因您在designer中修改了按钮的大小,或者i18n应用程序和文本不同,您的测试将中断。

--建议--(即太大,无法发表评论)

您不应该使用
向提交按钮添加空格。相反,您应该使用CSS根据自己的喜好设置按钮的样式。所以你会有这样的想法:

input[type=button] {
    padding:10px;
    min-width: 150px;
}
同样,这可以消除您在选择按钮时遇到的任何问题。这可能是编码与watin冲突的问题,因此,使用CSS进行此操作将使调试问题更清晰、更容易

编辑: 您是否尝试过按ID而不是按值搜索?ID在页面上应该是唯一的,所以如果它不能通过这些方法找到它,那么这是一个可以排除的问题。也可能是因为你正在搜索一个按钮。
不同


编辑2:即使问题是由于编码中断造成的,我仍然建议您重置该按钮以重置文本(删除所有非中断空格)并为其附加id/名称。原因是出于国际化目的——如果出于某种原因,您在designer中修改了按钮的大小,或者i18n应用程序和文本不同,您的测试将中断。

哇,您真的喜欢空格!我会删除这些内容并使用填充/边距,就像html被设计用来使用一样。然后你就不需要所有的空格,你可以给你的按钮指定一个合适的值,watiN会识别出来。

哇,你真的很喜欢空格!我会删除这些内容并使用填充/边距,就像html被设计用来使用一样。然后你就不需要所有的空格,你可以给你的按钮分配一个合适的值,watiN会识别它。

我认为这是因为HTML源代码中的
实际上是一个特殊字符的转义版本,代表一个不间断的空格。因此,在C#源代码中,可能需要该字符而不是html实体代码。我认为您可以通过使用此按钮提交GET表单来找到该角色的代码。它将在url中显示转义字符代码


当然,最好不要把空间放在那里。您应该使用CSS为按钮添加填充。

我认为这是因为HTML源代码中的
实际上是一个特殊字符的转义版本,它表示一个不间断的空格。因此,在C#源代码中,可能需要该字符而不是html实体代码。我认为您可以通过使用此按钮提交GET表单来找到该角色的代码。它将在url中显示转义字符代码


当然,最好不要把空间放在那里。您应该使用CSS为按钮添加填充。

您不应该将实体与WatiN一起使用

此代码可以工作,但必须使用真正的不间断空格字符

browser.Button(
    WatiN.Core.Find.ByValue(
        "   Login   ")).Click();
这可能不方便,但您可以使用(在添加对
System.Web
的引用后)
HttpUtility
类:

browser.Button(
    WatiN.Core.Find.ByValue(
        System.Web.HttpUtility.HtmlDecode(
            "&nbsp;&nbsp;&nbsp;Login&nbsp;&nbsp;&nbsp;"))).Click();
但是,如果我是你,我只会选择
Regex

browser.Button(
    WatiN.Core.Find.ByValue(
        new Regex(@"^\s*Login\s*$"))).Click();
甚至
新的正则表达式(“登录”)


有趣的事情:如果你需要
查找.ByText
,你不需要太麻烦,而且你可以使用规则空间(即不完全是非中断空间)。这是因为本地IE
IHTMlement::getAttribute
(http://msdn.microsoft.com/en-us/library/aa752280(VS.85).aspx)将
属性从
innertext
转换为常规空格,但将
值、
id
等转换为常规空格。它不会(
转换为真正的不间断空格-
0xA0
)您不应该将实体与WatiN一起使用

此代码可以工作,但必须使用真正的不间断空格字符

browser.Button(
    WatiN.Core.Find.ByValue(
        "   Login   ")).Click();
这可能不方便,但您可以使用(在添加对
System.Web
的引用后)
HttpUtility
类:

browser.Button(
    WatiN.Core.Find.ByValue(
        System.Web.HttpUtility.HtmlDecode(
            "&nbsp;&nbsp;&nbsp;Login&nbsp;&nbsp;&nbsp;"))).Click();
但是,如果我是你,我只会选择
Regex

browser.Button(
    WatiN.Core.Find.ByValue(
        new Regex(@"^\s*Login\s*$"))).Click();
甚至
新的正则表达式(“登录”)

有趣的事情:如果你需要
查找.ByText
,你不需要太麻烦,你可以使用regu