Список пуст, когда я пытаюсь заполнить его результатами поиска Google в Firefox, используя селен - PullRequest
0 голосов
/ 02 октября 2019

Я пытаюсь выполнить поиск в Google по ключевому слову, а затем утверждаю, что четвертый результат поиска - это конкретное слово. Я попробовал тот же код в Google Chrome, и он работал правильно, но тот же код не работает в Firefox

public class Task4_Class {

    WebDriver driver;

    @BeforeClass
    public void beforeClass() {
        System.getProperty("webdriver.gecko.driver","src\\test\\resources\\Drive\\geckodriver.exe"); 
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
    }

    @AfterClass
    public void afterClass() {
        //driver.close();
    }

    @BeforeMethod
    public void beforeMethod() {
        driver.navigate().to("https://www.google.com/ncr");
    }

    @Test
    public void searchInGoogleAndAssertTheFourthResult() {
        WebElement searchBox = driver.findElement(By.name("q"));
        searchBox.sendKeys("TestNG");
        searchBox.sendKeys(Keys.ENTER);
          List <WebElement> results = driver.findElements(By.className("ellip"));
          String fourthResult = results.get(3).getText();
          Assert.assertEquals(fourthResult, "TestNG Tutorial");
    }
}

1 Ответ

0 голосов
/ 02 октября 2019

Ваш тест не ожидал появления результатов, поэтому он заполнил бы список пустыми элементами, поскольку страница была загружена не полностью. Я обновил ваш код, чтобы вызвать WebDriverWait, а также обновил ваш локатор XPath до более надежного. Я протестировал эту функцию и успешно получил четвертый результат поиска.

    @Test
    public void searchInGoogleAndAssertTheFourthResult() {
        WebElement searchBox = driver.findElement(By.XPath("q"));
        searchBox.sendKeys("TestNG");
        searchBox.sendKeys(Keys.ENTER);

          // wait for elements to exist
          new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.XPath("//a/h3/div")));

          // get list of search result elements
          List <WebElement> results = driver.findElements(By.XPath("//a/h3/div"));

          String fourthResult = results.get(3).getText();

          // The exact title is not just "TestNG Tutorial", there is more text
          // need to change this to a contains
          Assert.assertTrue(fourthResult.contains("TestNG Tutorial"));

          // this one will not work
          Assert.assertEquals(fourthResult, "TestNG Tutorial");
    }
}

Обратите внимание, что ваш оператор Assert.assertEquals не будет выполнен, поскольку ни один из результатов поиска не является точным соответствием "TestNG Tutorial". У них также есть другой текст, такой как "TestNG Tutorial: Аннотации, Framework, Примеры в ...". Таким образом, вместо этого вы должны выполнить свой запрос assert против contains.

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