Java 刷新搜索结果后,无法在输出中获取正确的文本

Java 刷新搜索结果后,无法在输出中获取正确的文本,java,selenium,Java,Selenium,这是一个与查找鞋子成本相关的网站。最初,我输入文本并执行搜索并输出获得的结果数 选择条件后,搜索结果将根据新条件刷新。 但输出仍然显示先前的结果。我尝试了隐式等待,但它仍然显示旧的结果 代码如下: public void openBrowser() { StaticData.driver.get("http://laceup.io/phase2"); } public void homeSearchAndClick() { System.out.println("In ho

这是一个与查找鞋子成本相关的网站。最初,我输入文本并执行搜索并输出获得的结果数

选择条件后,搜索结果将根据新条件刷新。 但输出仍然显示先前的结果。我尝试了隐式等待,但它仍然显示旧的结果

代码如下:

public void openBrowser() 
{
    StaticData.driver.get("http://laceup.io/phase2");
}

public void homeSearchAndClick() 
{
    System.out.println("In home search");
    StaticData.driver.findElement(By.xpath(".//*[@id='search_field']")).sendKeys("Nike");
    StaticData.driver.findElement(By.xpath("html/body/div[1]/div/div[1]/div[1]/div[1]/div/button")).click();
}

// Function to search by FEMALE gender

public void searchForFemale() 
{
    System.out.println("Gender: Female clicked");
    StaticData.driver.findElement(By.xpath("html/body/div[1]/div/section/div[1]/div[1]/div/div[1]/div/div[2]/label/span")).click();
}

public void filterSearchCount() 
{
    StaticData.driver.manage().timeouts().implicitlyWait(500, TimeUnit.SECONDS);
    String searchCount = StaticData.driver.findElement(By.xpath(".//*[@id='show_query']/h2")).getText();
    System.out.println("Filter search count: " + searchCount);
}

我发现一个
驱动程序.navigate().refresh()filterSearchCount()
中使用的code>执行此技巧。尽管如此,我还是注意到Nike的filter复选框没有被选中。这样,程序将显示
过滤器搜索计数:1919个结果
(1918来自勇士队的Nike+1)


如果你想知道Nike-Women的确切结果,你还应该在文件管理器区域检查Nike,正如我之前告诉你的,即使你在搜索文本框中输入了Nike,网站也不会自动检查。

我发现一个
驱动程序。导航().refresh()filterSearchCount()
中使用的code>执行此技巧。尽管如此,我还是注意到Nike的filter复选框没有被选中。这样,程序将显示
过滤器搜索计数:1919个结果
(1918来自勇士队的Nike+1)


如果你想要Nike-Women的准确结果,你也应该在文件管理器区域检查Nike,正如我之前告诉过你的那样,即使你在搜索文本框中输入了Nike,网站也不会自动检查。如果你的目标是获取女性“Nike”的结果数量,还有另一种方法。你可以在主页上预先切换女士

仅供参考,我正在使用PageObjectFactory简化您的代码

Phase2Page.java-主页的页面对象工厂

public class Phase2Page {
    WebDriver driver;

    public Phase2Page(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(xpath = "//*[@id='search_field']")
    WebElement searchField;

    @FindBy (xpath = "html/body/div[1]/div/div[1]/div[1]/div[1]/div/button")
    WebElement searchBtn;

    @FindBy(xpath = ".//*[@id='filter_gender_ul']/li[2]")
    WebElement LadiesToggle;

    public void homeSearchAndClick() {
        System.out.println("In home search");
        LadiesToggle.click();
        searchField.sendKeys("Nike");
        searchBtn.click();
    }
}
public class SearchPage {
    WebDriver driver;


    @FindBy(xpath = ".//*[@id='show_query']/h2")
    WebElement searchCount;

    public SearchPage(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 50),this);
    }

    @FindBy(xpath = "html/body/div[1]/div/section/div[1]/div[1]/div/div[1]/div/div[2]/label/span")
    WebElement femaleCheckbox;


    // Function to search by FEMALE gender
    public void searchForFemale() {
        System.out.println("Gender: Female clicked");
        femaleCheckbox.click();
    }

    public void filterSearchCount() {
        String count = searchCount.getText();
        System.out.println("Filter search count: " + count);
    }
}
SearchPage.java-搜索页面的页面对象工厂

public class Phase2Page {
    WebDriver driver;

    public Phase2Page(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(xpath = "//*[@id='search_field']")
    WebElement searchField;

    @FindBy (xpath = "html/body/div[1]/div/div[1]/div[1]/div[1]/div/button")
    WebElement searchBtn;

    @FindBy(xpath = ".//*[@id='filter_gender_ul']/li[2]")
    WebElement LadiesToggle;

    public void homeSearchAndClick() {
        System.out.println("In home search");
        LadiesToggle.click();
        searchField.sendKeys("Nike");
        searchBtn.click();
    }
}
public class SearchPage {
    WebDriver driver;


    @FindBy(xpath = ".//*[@id='show_query']/h2")
    WebElement searchCount;

    public SearchPage(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 50),this);
    }

    @FindBy(xpath = "html/body/div[1]/div/section/div[1]/div[1]/div/div[1]/div/div[2]/label/span")
    WebElement femaleCheckbox;


    // Function to search by FEMALE gender
    public void searchForFemale() {
        System.out.println("Gender: Female clicked");
        femaleCheckbox.click();
    }

    public void filterSearchCount() {
        String count = searchCount.getText();
        System.out.println("Filter search count: " + count);
    }
}
Test1.java-您的实际执行测试

public class Test1 {
    WebDriver driver;

    public void openBrowser() {
        driver.get("http://laceup.io/phase2");
    }

    @Test
    public void testSearch(){
        System.setProperty("webdriver.chrome.driver", "D:\\Selenium Webdriver/chromedriver.exe");
        driver = new ChromeDriver();
        openBrowser();
        Phase2Page objHome = new Phase2Page(driver);
        SearchPage objSearch = new SearchPage(driver);
        objHome.homeSearchAndClick();
        objSearch.filterSearchCount();
        driver.quit();

    }
}

如果你的目标是为“Nike女性版”获取更多的结果,那么还有另一种方法。你可以在主页上预先切换女士

仅供参考,我正在使用PageObjectFactory简化您的代码

Phase2Page.java-主页的页面对象工厂

public class Phase2Page {
    WebDriver driver;

    public Phase2Page(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(xpath = "//*[@id='search_field']")
    WebElement searchField;

    @FindBy (xpath = "html/body/div[1]/div/div[1]/div[1]/div[1]/div/button")
    WebElement searchBtn;

    @FindBy(xpath = ".//*[@id='filter_gender_ul']/li[2]")
    WebElement LadiesToggle;

    public void homeSearchAndClick() {
        System.out.println("In home search");
        LadiesToggle.click();
        searchField.sendKeys("Nike");
        searchBtn.click();
    }
}
public class SearchPage {
    WebDriver driver;


    @FindBy(xpath = ".//*[@id='show_query']/h2")
    WebElement searchCount;

    public SearchPage(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 50),this);
    }

    @FindBy(xpath = "html/body/div[1]/div/section/div[1]/div[1]/div/div[1]/div/div[2]/label/span")
    WebElement femaleCheckbox;


    // Function to search by FEMALE gender
    public void searchForFemale() {
        System.out.println("Gender: Female clicked");
        femaleCheckbox.click();
    }

    public void filterSearchCount() {
        String count = searchCount.getText();
        System.out.println("Filter search count: " + count);
    }
}
SearchPage.java-搜索页面的页面对象工厂

public class Phase2Page {
    WebDriver driver;

    public Phase2Page(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(driver, this);
    }

    @FindBy(xpath = "//*[@id='search_field']")
    WebElement searchField;

    @FindBy (xpath = "html/body/div[1]/div/div[1]/div[1]/div[1]/div/button")
    WebElement searchBtn;

    @FindBy(xpath = ".//*[@id='filter_gender_ul']/li[2]")
    WebElement LadiesToggle;

    public void homeSearchAndClick() {
        System.out.println("In home search");
        LadiesToggle.click();
        searchField.sendKeys("Nike");
        searchBtn.click();
    }
}
public class SearchPage {
    WebDriver driver;


    @FindBy(xpath = ".//*[@id='show_query']/h2")
    WebElement searchCount;

    public SearchPage(WebDriver driver){
        this.driver = driver;
        PageFactory.initElements(new AjaxElementLocatorFactory(driver, 50),this);
    }

    @FindBy(xpath = "html/body/div[1]/div/section/div[1]/div[1]/div/div[1]/div/div[2]/label/span")
    WebElement femaleCheckbox;


    // Function to search by FEMALE gender
    public void searchForFemale() {
        System.out.println("Gender: Female clicked");
        femaleCheckbox.click();
    }

    public void filterSearchCount() {
        String count = searchCount.getText();
        System.out.println("Filter search count: " + count);
    }
}
Test1.java-您的实际执行测试

public class Test1 {
    WebDriver driver;

    public void openBrowser() {
        driver.get("http://laceup.io/phase2");
    }

    @Test
    public void testSearch(){
        System.setProperty("webdriver.chrome.driver", "D:\\Selenium Webdriver/chromedriver.exe");
        driver = new ChromeDriver();
        openBrowser();
        Phase2Page objHome = new Phase2Page(driver);
        SearchPage objSearch = new SearchPage(driver);
        objHome.homeSearchAndClick();
        objSearch.filterSearchCount();
        driver.quit();

    }
}

当我使用thread.sleep in filterSearchCount()时,我的代码起作用。

当我使用thread.sleep in filterSearchCount()时,我的代码起作用。

为什么要使用StaticData.driver.findElement而不仅仅是driver.findElement?事实并非如此。搜索结果不是男性+女性。在这个网站上,如果你选择不同的性别,复选框可以作为单选按钮。这意味着选择女人将自动取消选择男人。我遵循的方式还有其他选择吗?除了使用页面对象工厂外,还应显示什么确切数字?1918年还是6158年?我之所以问你,是因为1918是为女性而出现的-当它没有从过滤器中选中时,nike会出现,而当我选中复选框时,6158会出现。理想情况下,根据我的标准,它应该是1918。为什么你使用StaticData.driver.findElement而不是driver.findElement?事实并非如此。搜索结果不是男性+女性。在这个网站上,如果你选择不同的性别,复选框可以作为单选按钮。这意味着选择女人将自动取消选择男人。我遵循的方式还有其他选择吗?除了使用页面对象工厂外,还应显示什么确切数字?1918年还是6158年?我之所以问你,是因为1918是为女性而出现的-当它没有从过滤器中选中时,nike会出现,而当我选中复选框时,会出现6158。理想情况下,根据我的标准,它应该是1918