2010-12-21 5 views
0

Diese Leerzeichen werden nicht von mir auf HTML SIDE hinzugefügt und ich kann HTML nicht bearbeiten Ich möchte wissen, was soll meine Vergleichszeichenfolge?HTML-Zeichenfolge wird nicht überprüft

Ich verwende watin Website Testprozess zu automatisieren, aber ich bin nicht in der Lage nur eine button.Every andere Werke zu begegnen

Watin Inhalt sucht nach Name/Werte/id und viele mehr und funktioniert gut, aber wenn ich sehe, der Wert der Submit-Button, die ich angeklickt werden müssen, um es einige Pausen & nsbp so denken, hat ich sie

hier ist die html eine gewisse Rolle spielen:

<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> 

und hier ist die Code suchen

browser.Button(WatiN.Core.Find.ByValue("&nbsp;&nbsp;&nbsp;Login&nbsp;&nbsp;&nbsp;")).Click(); 

was getan werden kann ??

+1

Das ist wirklich nicht fair, dass Leute diese Frage ablehnen, wenn sie wahrscheinlich nicht einmal wissen, was WatiN. – prostynick

Antwort

2

Sie sollten keine Entitäten mit WatiN verwenden.

Dieser Code wird funktionieren, aber Sie echte non-breaking Leerzeichen verwenden müssen:

browser.Button(
    WatiN.Core.Find.ByValue(
     "   Login   ")).Click(); 

Dies ist wahrscheinlich unbequem ist, aber man konnte (nach Bezug auf System.Web Zugabe) HttpUtility Klasse verwenden:

browser.Button(
    WatiN.Core.Find.ByValue(
     System.Web.HttpUtility.HtmlDecode(
      "&nbsp;&nbsp;&nbsp;Login&nbsp;&nbsp;&nbsp;"))).Click(); 

Aber, wenn ich du wäre, würde ich nur mit Regex:

browser.Button(
    WatiN.Core.Find.ByValue(
     new Regex(@"^\s*Login\s*$"))).Click(); 

oder sogar new Regex("Login").

Interessante Sache: Wenn Sie jemals Find.ByText haben müssen Sie nicht so viel Mühe haben, und Sie können regulären Platz (dh nicht gerade nicht brechenden Raum) verwenden. Das ist, weil native IE IHTMLElement::getAttribute (http://msdn.microsoft.com/en-us/library/aa752280(VS.85).aspx) &nbsp; von innertext Attribut zu regulären Leerzeichen konvertiert, aber von value, id usw. es doesn ' t (&nbsp; werden in echte nicht-brechende Leerzeichen konvertiert -

+0

Man Sie arbeitet great.This mehr als wellbrowser.Button ( WatiN.Core.Find.ByValue ( new Regex (@ "^ \ s * Anmelden \ s * $")))() klicken. Ich möchte etwas wissen über @ "^ \ s * Login \ s * $" welche Dosis diese Zeichenfolge bedeuten ?? –

+0

Dies ist nur ein regulärer Ausdruck, der von der Klasse .Net 'Regex' verwendet wird. Es ist ein großes Thema, wenn Sie nichts darüber wissen. Kurz gesagt, dieser spezielle Ausdruck - '^ \ s * Login \ s * $' - wird mit jedem Wert übereinstimmen, der mit Whitespace beginnt und endet und den 'Login'-Teil enthält. – prostynick

3

- Vorschlag - (das heißt zu groß für einen Kommentar)

Sie sollten Räume nicht auf den Absenden-Button verwenden &nbsp; hinzuzufügen. Stattdessen sollten Sie CSS verwenden, um die Schaltfläche nach Ihren Wünschen zu gestalten. Also würde man so etwas wie hat:

input[type=button] { 
    padding:10px; 
    min-width: 150px; 
} 

Aus dem gleichen Grunde, das keines der Probleme beseitigen könnten Sie mit der Auswahl der Taste haben. Es könnte ein Problem von encodings brechen mit watin und als Ergebnis, dies mit CSS tun wird das Debuggen des Problems viel sauberer und viel einfacher.

Bearbeiten: Haben Sie versucht, nach ID und nicht nach Wert zu suchen? IDs sollten auf einer Seite eindeutig sein. Wenn sie auf diese Weise nicht gefunden werden, kann dies ein Problem sein, das ausgeschlossen werden kann. Es könnte auch die Tatsache sein, dass Sie nach einer Schaltfläche suchen. A <button> ist nicht dasselbe wie ein <input type="button">.

Bearbeiten 2: Obwohl das Problem aufgrund von Codierungen auftrat, empfehle ich Ihnen, diese Schaltfläche zurückzusetzen, um den Text zurückzusetzen (alle nicht brechenden Leerzeichen zu entfernen) und eine ID/einen Namen anzuhängen. Der Grund dafür ist die Internationalisierung - und wenn Sie aus irgendeinem Grund die Größe der Schaltfläche im Designer ändern, oder wenn die App und der Text anders sind, wird der Test abgebrochen.

+0

Afnan hat gerade seinen Beitrag bearbeitet: es ist nicht sein html. (-1, lass es mich wissen, wenn du den Beitrag änderst) – Crisfole

+0

Sogar ohne Edit ist es offensichtlich, dass op WatiN benutzt, also wenn jemand nicht weiß, was es ist, denke ich, er/sie sollte die Frage nicht beantworten. -1, weil die Antwort nichts mit der Frage zu tun hat. – prostynick

+0

Behoben - hinzugefügt den Titel :). Und ich glaube nicht, dass meine Antwort nichts mit der Frage zu tun hat. Es war ein Problem mit den Codierungen und ich denke, es wäre am besten, wenn Afnan versuchte, nach ID zu suchen und CSS für die Stylings zu verwenden (siehe Edit 2). – MunkiPhD

0

Wow, du magst wirklich Räume! Ich würde diese entfernen und padding/margins verwenden, wie html für die Verwendung gedacht war. Dann brauchen Sie nicht alle diese Leerzeichen und Sie können Ihrem Knopf einen richtigen Wert zuweisen, den watiN erkennen wird.

0

Ich denke, es ist, weil die &nbsp; in der HTML-Quelle tatsächlich eine Escape-Version des Sonderzeichens ist, die einen keinen brechenden Platz darstellt. In Ihrer C# -Quellquelle benötigen Sie wahrscheinlich dieses Zeichen anstelle des HTML-Entitätscodes. Ich denke, dass Sie den Code dieses Charakters finden können, indem Sie diesen Button verwenden, um ein GET-Formular zu senden. Es wird der Code mit Escapezeichen in der URL angezeigt.

Natürlich ist es besser, die Räume überhaupt nicht dort zu platzieren. Sie sollten die Schaltfläche stattdessen mit CSS füllen.

Verwandte Themen