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