Как я могу нажать на это выпадающее меню с помощью селена? - PullRequest
0 голосов
/ 03 января 2019

У меня проблема с выпадающим меню из википедии. С появляется, когда я вставляю несколько букв. Как я могу сказать, огурец / селен, чтобы нажать на «Баум».

enter image description here

Я делаю это, чтобы выучить селен.

Вот мои шаги. Сначала я иду в немецкую википедию:

@Given("^You want to search for \"Baum\" on \"([^\"]*)\"$")
public void youWantToSearchForOnWikipediaOrg(String page) throws Throwable
{
    System.setProperty("webdriver.chrome.driver",
            "C:\\...\\chromedriver_win32\\chromedriver.exe");
    driver = new ChromeDriver();
    driver.get("https://"+page+"/wiki/Wikipedia:Hauptseite");
}

Затем я ищу слово «Баум»:

@Then("^You tipp the letters \"([^\"]*)\", \"([^\"]*)\" and \"([^\"]*)\"$")
public void youTippTheLettersAnd(String letter1, String letter2, String letter3) throws Throwable
{
    Thread.sleep(5);
    driver.findElement(By.xpath("//input[@id='searchInput']")).sendKeys(letter1);
    driver.findElement(By.xpath("//input[@id='searchInput']")).sendKeys(letter2);
    driver.findElement(By.xpath("//input[@id='searchInput']")).sendKeys(letter3);
    Thread.sleep(25);
}

Теперь появляется выпадающее меню, и я хочу нажать на запись "Baum".

@Then("^Click on the appearing Baum$")
public void clickOnTheAppearing() throws Throwable
{
    //Thread.sleep(50);
    driver.findElement(By.xpath("//a/div")).click();
}

Но xpath не может найти элемент. Я пробую разные xpath и css, но ничего не помогает ...

Примеры: * 1 021 *

// [@ Classname = 'мвт-searchSuggest-linkinput'] // [текст () = 'Baum']

/ HTML / тело / DIV [6] / DIV / а * +1028 * 1 * 1 029 * / DIV / диапазон

/ HTML / тело / DIV [6] / DIV / а * 1 * тысяча тридцать две * * тысяча тридцать три / дела

body> div.suggestions> div> a: nth-child (1)> div> span

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Вы также можете использовать текст в xpath вместе с ключевым словом содержит

//*[contains(text(),'Baun')]
0 голосов
/ 03 января 2019

Вы также можете попробовать это:

String text = "Baum"; /* text you want to select, may be you can parameterize this in your Gherkin step */
driver.findElement(By.xpath("//a[contains(@title,'" + text + "')]");

В качестве альтернативы, вы можете просмотреть все результаты предложенных предложений, повторить их и выбрать тот, который вам нравится:

List<WebElement> suggestionResults = driver.findElements(By.xpath("//a/div[@class='suggestions-result']");
for(WebElement result : suggestionResults){
    if(results.getText().equalsIgnoreCase(text) || result.getText().contains(text)){
       result.click();
       break;
    }
}

Расширенный метод: Если вы хотите выбрать конкретный текст после текста поиска «Baum», то вы можете выбрать:

//a[.//span[text()='Baum'] and .//text()[contains(.,'Welch algorithm')]]

Первое условие для вашего текста поиска соответствует «Baum», а второе условие для вашего желаемого текста.выбор «алгоритм Уэлча».Снова сделайте эти 2 ввода в качестве параметров, управляемых из определения вашего корнишона.

0 голосов
/ 03 января 2019

Вам необходимо указать дополнительную информацию для тега, указав, какое значение выбрать.Поэтому вам нужно использовать что-то вроде:

driver.findElement(By.xpath("//a[@title='Baun']")).click();
...