Как получить автовыключения по поиску в Yahoo через селен и xpath - PullRequest
0 голосов
/ 12 июня 2018

Следующий код генерирует ошибку в Xpath.Xpath для динамического элемента, и я использовал начальный с.Я не получаю никаких ошибок до запуска кода, но после запуска eclipse генерирует ошибку.Пожалуйста, помогите:

package com.TSOne.tcone;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class YahooTextSearch {
       public static void main(String[] args) {
         System.setProperty("webdriver.chrome.driver", "/Users/owner/desktop/chromedriver");
         WebDriver driver = new ChromeDriver();
         driver.get("http://www.yahoo.com");
         driver.findElement(By.id("uh-search-box")).sendKeys("selen");
         List<WebElement> list=driver.findElements(By.xpath("//*[starts-with(@id,'yui_3_18_0_3_1528696’)]"));
         System.out.println(list.size());
       }
}

Ответы [ 5 ]

0 голосов
/ 19 июля 2019
public static void main(String[] args) throws InterruptedException {
    //setting gecko driver
    System.setProperty("webdriver.gecko.driver",paste path of the gecko driver");
    System.setProperty("webdriver.firefox.marionette",paste path of the gecko driver");

    WebDriver driver=new FirefoxDriver();
    //launching yahoo 
    driver.get("https://in.yahoo.com/?p=us");
    //Entering text in to the yahoo search text field
    driver.findElement(By.xpath(".//*[@id='uh-search-box']")).sendKeys("selenium");
    Thread.sleep(5000);

    List<WebElement> ele = driver.findElements(By.xpath(".//ul[@class='yui3-aclist-list']/li/span/span"));

    //getting size of the search results from suggestion box
    System.out.println(ele.size());

    //getting text from the suggestion box
    for (WebElement e : ele) {
        System.out.println(e.getText());
    }
}

попробуйте эту надежду, это будет работать

0 голосов
/ 14 июня 2018

Вы можете использовать этот код для этого:

    WebDriver driver = PlayField.getChromeDriver();  
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver.navigate().to("https://www.yahoo.com/");
    driver.manage().window().maximize();

    WebElement inputField = driver.findElement(By.id("uh-search-box"));
    inputField.sendKeys("Bye");
    List<String> autoSuggestions = driver.findElements(By.cssSelector("ul[role='listbox'] li span span"))
                                         .stream()
                                         .map(suggestion -> suggestion.getAttribute("innerText"))
                                         .collect(Collectors.toList());
    System.out.println(autoSuggestions);

Если вы не используете неявное ожидание, вы также можете дождаться отображения элементов для селектора "ul [role = 'listbox'] li span span".

Вы также можете использовать этот xpath, если хотите использовать xpath: "// ul [@ role = 'listbox'] / li / span / span"

Надеюсь, что этобудет работать на вас.

0 голосов
/ 12 июня 2018

Если вы хотите получить размер списка, сгенерированного после ввода текста «Selen» в поле поиска, вам следует использовать код, указанный ниже:

      driver.get("http://www.yahoo.com");
      driver.findElement(By.id("uh-search-box")).sendKeys("selen");
      WebDriverWait wait = new WebDriverWait(driver, 60);
      List<WebElement> list=wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//div[@class='yui3-aclist-content']//li[contains(@class,'aclist-item')]")));

      System.out.println(list.size());

Обратите внимание, что вы не можете использоватьлокатор " // * [начинается с (@ id, 'yui_3_18_0_3_1528696')] ", поскольку числа после yui_3_18_0_3_1528 меняются при перезагрузке страницы.

0 голосов
/ 12 июня 2018

Для получения поиска Yahoo авто предложения вы можете использовать следующее решение:

  • Кодовый блок:

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("http://www.yahoo.com");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#uh-search-box"))).sendKeys("selen");
    List<WebElement> yahoo_search_auto_suggestions = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("ul.yui3-aclist-list li>span")));
    for (WebElement suggestion:yahoo_search_auto_suggestions)
        System.out.println(suggestion.getText());
    
  • Вывод на консоль:

    selena gomez
    selenium
    selena break up
    selena gomez pics
    selena gomez songs
    selenium ide
    selenium tutorial
    selena quintanilla
    seleniumhq.org
    selenium interview questions
    

Снимок браузера:

Yahoo_auto_suggestion

0 голосов
/ 12 июня 2018

Как минимум, измените

//*[starts-with(@id,'yui_3_18_0_3_1528696’)]
                                         ^

на

//*[starts-with(@id,'yui_3_18_0_3_1528696')]
                                         ^

(Замените отмеченную фигурную единственную кавычку на прямую одиночная кавычка.)

Если у вас возникнут дополнительные проблемы, уточните детали.Обратите внимание, что //* является дорогостоящей операцией в целом в XPath, и особенно в Selenium [спасибо за полезный комментарий, @ cruisepandey ] - указание имени элемента, если возможно, позволит избежать потенциальной проблемы с производительностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...