Voici mon Html:
Wait wait = new FluentWait<WebDriver>(driver) .withTimeout(10, TimeUnit.SECONDS) .pollingEvery(3, TimeUnit.SECONDS); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//label[contains(text(),'Name:')]"))); ((JavascriptExecutor) driver).executeScript("arguments[0].click();", labelName); searchName =@FindBy(css = "input.x-form-text.x-form-field.x-form-focus") private WebElement searchByName; searchByName.sendKeys(name);
J'ai essayé ci-dessous id "ext-comp-1060 est dynamique donc je ne peux pas l'utiliser.
xpath = "//div[@class='x-form-field-wrap x-form-field-trigger-wrap x-trigger-wrap-focus']//input[@class='input.x-form-text.x-form-field.x-form-focus']" css = "input.x-form-text.x-form-field.x-form-focus"
Dans mon application, le même champ de saisie de texte que je dois utiliser deux fois l'une après l'autre la première fois que ça marche, j'ai essayé comme ceci:
<div class="x-form-item " tabindex="-1" id="ext-gen118"> <label for="ext-comp-1060" style="width:40px;" class="x-form-item-label" id="ext-gen119">Name:</label> <div class="x-form-element" id="x-form-el-ext-comp-1060" style="padding-left:45px"> <div class="x-form-field-wrap x-form-field-trigger-wrap x-trigger-wrap-focus" id="ext-gen120" style="width: 168px;"> <input type="text" size="16" autocomplete="off" id="ext-comp-1060" name="ext-comp-1060" class="x-form-text x-form-field x-form-focus" style="width: 143px;" title=""> <span class="x-form-twin-triggers" id="ext-gen121"> <img src="/mco/extjs/resources/images/default/s.gif" alt="" class="x-form-trigger x-form-clear-trigger" id="ext-gen122" style="display: none;"> <img src="/mco/extjs/resources/images/default/s.gif" alt="" class="x-form-trigger x-form-search-trigger" id="ext-gen123"> </span> </div> </div> <div class="x-form-clear-left"></div> </div>
Mais en même temps la deuxième fois ça ne marche pas
6 Réponses :
Est-ce que seuls les nombres changent ou le mot entier? Si seuls les nombres changent, vous pouvez l'utiliser comme localisateur Css:
input[id^='ext-comp']
Veuillez ajouter ceci en commentaire de la question car ce n'est certainement pas une réponse
modifier ma réponse dans quelque chose d'utile de toute façon, merci d'avoir ajusté @ D.Lawrence
J'ai mis à jour votre xpath à l'aide de contains, essayez ceci:
xpath = "//div[contains(@class, 'x-form-field-wrap']/input[contains(@class, 'x-form-text']"
Utilisez le XPATH
suivant qui identifiera l'élément d'entrée en référence à la balise d'étiquette Name:
// label [text () = 'Name:'] / following-sibling :: div [1] // input
Pour gérer l'élément dynamique, indiquez WebDriverWait
et attendez elementToBeClickable()
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[text()='Name:']/following-sibling::div[1]//input"))).sendKeys("Hello");
Merci à tous, j'ai essayé toutes les solutions mais rien ne fonctionne pour moi
En fait, j'ai deux mêmes champs de texte d'entrée dans mon application, donc le premier fonctionne.J'ai essayé comme ceci: css = "input.x-form-text.x-form-field.x-form-focus" avec wait mais en même temps fois pour la deuxième fois ça ne marche pas
Vous pouvez essayer ci-dessous xpath donné.
//div[@class='x-form-element']//child::input[@type='text' AND size='16']
J'accède au champ de saisie en utilisant l'attribut type et size de l'élément Web via un élément de niveau parent.
Hope cela résoudra votre problème.
Pour cliquer ()
dans l'élément souhaité, vous devez induire WebDriverWait pour elementToBeClickable ()
et vous pouvez utiliser l'un des éléments suivants Stratégies de localisation :
cssSelector
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[@class='x-form-item-label' and starts-with(@id, 'ext-gen')][starts-with(@for, 'ext-comp-') and text()='Name:']"))).click();
xpath
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label.x-form-item-label[id^='ext-gen'][for^='ext-comp-']"))).click();
Votre Attendre l'élément Rechercher l'élément et cliquer: webelement
est dynamique afin que vous puissiez rechercher une correspondance partielle pour l'attribut d'élément comme Id
, class
et Name code >
WebElement element = driver.findElement(byCss);
WebElement element = driver.findElement(byXpath);
element.click();
By byCss=By.cssSelector("input[id^='ext-comp-']");
By byXpath= By.xpath("//label[.='Name:']//input");
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(byCss));
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(byXpath));
Dupliquer Quelle version de TLS est prise en charge par JavaMail 1.4? < / a>
@Ruzal Yumaev Ce n'est pas lié à TLS