Java 从搜索建议中选择或断言值
我正在尝试使用SeleniumWebDriver和java执行一些操作,如下所示 1.开放亚马逊网站 2.在搜索文本字段中键入ipad-该字段显示对文本的少量建议 3.执行操作,如选择或打印建议中的项目数 在我这么做的时候,我观察到的是与DOM纯ajax响应中从未出现的建议相关的html代码,如果是这种情况,我如何执行任何操作,比如使用selenium webdriver随机选择项目 另一点是,在键入ipad并单击go之后,再次键入ipad将为DOM提供html代码以供建议 但我需要在第一次打字时进行评估Java 从搜索建议中选择或断言值,java,selenium,Java,Selenium,我正在尝试使用SeleniumWebDriver和java执行一些操作,如下所示 1.开放亚马逊网站 2.在搜索文本字段中键入ipad-该字段显示对文本的少量建议 3.执行操作,如选择或打印建议中的项目数 在我这么做的时候,我观察到的是与DOM纯ajax响应中从未出现的建议相关的html代码,如果是这种情况,我如何执行任何操作,比如使用selenium webdriver随机选择项目 另一点是,在键入ipad并单击go之后,再次键入ipad将为DOM提供html代码以供建议 但我需要在第一次打字
请提供您的建议。附件是屏幕截图,您可以随时查看该元素。进入元素,单击firepath中的inspect,它将为您提供xpath或css,您在其中制作的内容。虽然它不会为您提供html,因为它会被隐藏。因此,在您的情况下,每个元素都有一个唯一的id附加到它。要获取所有元素,请执行以下操作:
d.findElement(By.id("twotabsearchtextbox")).sendKeys("iPhone");
List<WebElement> lst = d.findElements(By.xpath(".//*[contains(@id,'issDiv')]"));
for (WebElement webElement : lst) {
System.out.println(webElement.getText());
}
或者根据文本,您可以通过以下方式完成:
List<WebElement> lst = d.findElements(By.xpath(".//*[contains(@id,'issDiv')]"));
for (WebElement webElement : lst) {
if (webElement.getText().equalsIgnoreCase("your item to select"))
webElement.click();
}
是的,自动搜索建议面板确实无法通过开发人员工具记录或识别。但我们仍然可以根据输入框中键入的前两个字符选择搜索建议。下面是我的自动amazon java类中的一个方法,其中有两个方法-一个用于从下拉列表中选择产品类型,另一个用于键入搜索文本,sayJava并从自动搜索建议中选择第三个选项
import org.openqa.selenium.firefox.*;
import org.openqa.selenium.interactions.*;
import org.openqa.selenium.support.ui.Select;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class AutomateAmazon1 {
static WebDriver driver=new FirefoxDriver();
Actions action=new Actions(driver);
//method to select a given "book" product category from drop down
public void selectAllorSingleProductAMZ()
{
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-scope.nav-sprite"))).build().perform();
WebElement productsearchdd_nav=driver.findElement(By.cssSelector("select#searchDropdownBox"));
Select productsearchdd=new Select(productsearchdd_nav);
List<WebElement> productsearchddoptionsele=productsearchdd.getOptions();
ArrayList<String> productsearchddoptionstext=new ArrayList<String>();
for(WebElement we:productsearchddoptionsele)
{
productsearchddoptionstext.add(we.getText());
}
System.out.println(productsearchddoptionstext);
for(String s:productsearchddoptionstext)
{
if(s.toString().contentEquals("Books"))
{
productsearchdd.selectByVisibleText("Books");
}
}
}
//method to input product search text and select third option from //auto search suggestions
public void searchforSelectedPTAMZ()
{
//input search text "ja" in search box
driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input")).sendKeys("ja");
//move to first option on auto search suggestions using keyboard down //arrow key selection actions
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ARROW_DOWN).build().perform();
//move to second option on auto search suggestions using keyboard down //arrow key selection actions
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ARROW_DOWN).build().perform();
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ARROW_DOWN).build().perform();
//finally press enter to choose the selection from auto search suggestions //and input will be autofilled
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ENTER).build().perform();
}
public static void main(String[] args)
{
driver.get("http://www.amazon.in/");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
AutomateAmazon1 runscriptest1= new AutomateAmazon1();
runscriptest1.selectAllorSingleProductAMZ();
runscriptest1.searchforSelectedPTAMZ();
}
}
但是,只要我右键单击建议列表中的某个项目,该列表就会消失,并且我无法进行元素检查。此外,当我们在搜索字段中键入时,issDiv将不会出现在DOM中。
import org.openqa.selenium.firefox.*;
import org.openqa.selenium.interactions.*;
import org.openqa.selenium.support.ui.Select;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
public class AutomateAmazon1 {
static WebDriver driver=new FirefoxDriver();
Actions action=new Actions(driver);
//method to select a given "book" product category from drop down
public void selectAllorSingleProductAMZ()
{
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-scope.nav-sprite"))).build().perform();
WebElement productsearchdd_nav=driver.findElement(By.cssSelector("select#searchDropdownBox"));
Select productsearchdd=new Select(productsearchdd_nav);
List<WebElement> productsearchddoptionsele=productsearchdd.getOptions();
ArrayList<String> productsearchddoptionstext=new ArrayList<String>();
for(WebElement we:productsearchddoptionsele)
{
productsearchddoptionstext.add(we.getText());
}
System.out.println(productsearchddoptionstext);
for(String s:productsearchddoptionstext)
{
if(s.toString().contentEquals("Books"))
{
productsearchdd.selectByVisibleText("Books");
}
}
}
//method to input product search text and select third option from //auto search suggestions
public void searchforSelectedPTAMZ()
{
//input search text "ja" in search box
driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input")).sendKeys("ja");
//move to first option on auto search suggestions using keyboard down //arrow key selection actions
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ARROW_DOWN).build().perform();
//move to second option on auto search suggestions using keyboard down //arrow key selection actions
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ARROW_DOWN).build().perform();
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ARROW_DOWN).build().perform();
//finally press enter to choose the selection from auto search suggestions //and input will be autofilled
action.moveToElement(driver.findElement(By.cssSelector("div.nav-search-field>input#twotabsearchtextbox.nav-input"))).sendKeys(Keys.ENTER).build().perform();
}
public static void main(String[] args)
{
driver.get("http://www.amazon.in/");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
AutomateAmazon1 runscriptest1= new AutomateAmazon1();
runscriptest1.selectAllorSingleProductAMZ();
runscriptest1.searchforSelectedPTAMZ();
}
}