2016-07-06 27 views
1

Ich muss auf das Eingabefeld im folgenden HTML zugreifen. Die Art und Weise, wie die Seite eingerichtet wird, muss ich mit dem Text "Adresszeile 1" verketten und dann Text an das Eingabefeld senden. Die ID des Eingabefelds ändert sich und das Layout der Felder hängt nicht von den Benutzereinstellungen ab. Ich kämpfe. Wenn Sie weitere Informationen benötigen, zögern Sie nicht zu fragen, ich möchte nicht mit zu vielen Informationen überladen.Verketten eines Elements mit CSS mit Text und Zugriff auf ein zugehöriges Feld

<td class="labelCol requiredInput"> 
 
    <label for="00N36000000xina"><span class="assistiveText">*</span>Address Line 1</label> 
 
</td> 
 
<td class="dataCol col02"> 
 
    <div class="requiredInput"> 
 
    <div class="requiredBlock"></div> 
 
    <input id="00N36000000xina" maxlength="255" name="00N36000000xina" size="20" tabindex="4" type="text"> 
 
    </div> 
 
</td>

ich so aufgerufen haben:

element(by.css('div.pbSubsection:nth-child(3) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > input')) 

jedoch je nachdem, wo der Benutzer die Felder setzt kann es sich bewegen. Ich hoffte also, auf das Label zugreifen zu können und damit sein Eingabefeld zu bestimmen.

+0

Leider nicht sicher, was genau die Frage ... wollen Sie das Feld zugreifen wollen oder tun Sie, wie CSS-Selektoren Kette wissen? Was hast du bisher versucht, das funktioniert nicht? – Gunderson

+0

Und auch wenn Sie vollen HTML-Code zur Verfügung stellen können, wird nützlich sein. –

+0

@Gunderson Ich habe die Frage aktualisiert, hilft das? –

Antwort

2

Ich weiß nicht Winkelmesser, aber ich zusammen einige Code, der hoffentlich funktioniert oder in der Nähe sein wird, und ich werde Ihnen den Gedankenprozess und einige Informationen geben und hoffentlich können Sie es verwenden, um meinen Code zu beheben, wenn nötig das Problem lösen.

Beginnen Sie mit der Suche nach einem Element von XPath, "//label[text()='Address Line 1']"10. Dies sucht nach einem LABEL-Tag, das "Adresszeile 1" enthält. Sobald Sie dieses Element gefunden haben, erhalten Sie das label Attribut. Von Ihrem HTML ist dieses label das id für das INPUT Element, das Sie wünschen. Verwenden Sie jetzt die id, um das Element zu finden und damit zu tun, was Sie wollen.

id = element(by.xpath("//label[text()='Address Line 1']")).getAttribute("label") 
input = element(by.id(id)) 
input.sendkeys("some text") 
0

Try this:

 List<WebElement> elementList = driver.findElements(By.cssSelector("tbody > tr")); 
     for (WebElement element : elementList) { 
      if(element.findElement(By.cssSelector("td.labelCol > label")).getText().equalsIgnoreCase("Address Line 1")) { 
       element.findElement(By.cssSelector("input[type='text']")).sendKeys("textToInput"); 
      } 
     } 
+0

Das gibt mir alle Arten von Fehlern. Es will var für js nicht Liste verwenden –

+0

ich denke, ich missverstanden die Frage .. versuchen Sie es zu automatisieren ?? –

+0

Ja, mit einem Winkelmesser, das war eine schlechte Annahme, die Leute würden das mit meinen Tags wissen, tut mir leid. –

1

Lassen Sie sich diese selbst nicht getestet, aber man könnte so etwas wie dies versucht:

// $ is shorthand for element(by.css()) 
$('div.assistiveText').getAttribute('for').then(function (val) { 

    // locate the <input> by the value of the attribute on <label> 
    element(by.id(val)).sendKeys('abc'); // replace sendKeys with your intended function 

}); 

Oder wenn das erste Locator auf dem Etikett ist nicht spezifisch genug, Swap $('div.assistiveText') für element(by.cssContainingText('Address Line 1'))

habe ich versucht, es für andere Attribute (I ein for Attribut nicht überall in meiner app haben) und es schien t o arbeite für mich.

+0

Ich muss bei 'Eingabe muss ein String sein' Fehler? –

+0

Hmm ok, vor dem 'element (by.id (val))' Teil kannst du eine 'console.log (typeof (val));'? Wenn es keine Zeichenfolge ist, kann 'val.toString() '? Nicht sicher, ob das gefährlich ist. – Gunderson

+0

es mag nicht das "für" Ich habe versucht, die einfachen Anführungszeichen zu entfernen und es auch nicht so –