是否可以使用Selenium Java从href标记获取图书作者姓名值?
但它只输出一个空字符串是否可以使用Selenium Java从href标记获取图书作者姓名值?,java,selenium,xpath,css-selectors,webdriverwait,Java,Selenium,Xpath,Css Selectors,Webdriverwait,但它只输出一个空字符串 link.findElement(By.cssSelector("a.a-link-normal.a-text-normal")).getText()); 公共类AmazonSearchResultsPage{ 公共AmazonSearchResultsPage(网络驱动程序){ PageFactory.initElements(驱动程序,this); this.driver=driver; } 公共网络驱动程序; @FindBy(css=“#s-results-lis
link.findElement(By.cssSelector("a.a-link-normal.a-text-normal")).getText());
公共类AmazonSearchResultsPage{
公共AmazonSearchResultsPage(网络驱动程序){
PageFactory.initElements(驱动程序,this);
this.driver=driver;
}
公共网络驱动程序;
@FindBy(css=“#s-results-list-atf”)
公共网站元素搜索结果;
public void getBooksInfo(){
列表链接=searchResults.findElements(按.tagName(“li”));
如果(links.size()>0){
字符串标题,作者,价格,评级,畅销书;
对于(int i=0;i
根据评论更新
我正在尝试从amazon.com上的“搜索图书”页面获取图书作者姓名,例如,您可以通过搜索查询“Java”amazon.com/s/访问此链接,我尝试从那里获取作者姓名。嗯,从URL我可以提取信息
public class AmazonSearchResultsPage {
public AmazonSearchResultsPage(WebDriver driver) {
PageFactory.initElements(driver, this);
this.driver = driver;
}
public WebDriver driver;
@FindBy(css = "#s-results-list-atf")
public WebElement searchResults;
public void getBooksInfo () {
List<WebElement> links = searchResults.findElements(By.tagName("li"));
if (links.size() > 0) {
String title, author, price, rating, isBestSeller;
for (int i = 0; i < links.size(); i++) {
title = links.get(i).findElement(By.cssSelector("h2.a-size-medium.s-inline.s-access-title.a-text-normal")).getText();
author = links.get(i).findElement(By.cssSelector("a.a-link-normal.a-text-normal")).getText());
}
}
else System.out.println("Your search has no results");
}
}
更新问题的代码:
[RemoteTestNG] detected TestNG version 6.14.2
1542125453774 mozrunner::runner INFO Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\Dhamo\\AppData\\Local\\Temp\\rust_mozprofile.ZTVooPdHTxOZ"
1542125455373 Marionette INFO Listening on port 63531
1542125455395 Marionette WARN TLS certificate errors will be ignored for this session
Nov 13, 2018 10:10:55 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Cay S. Horstmann
Cay S. Horstmann
publicstaticvoidtestmf(){
网络驱动程序;
System.setProperty(“webdriver.gecko.driver”,“/src/drivers/geckodriver64bit.exe”);
驱动程序=新的FirefoxDriver();
司机,快(
"https://www.amazon.com/s/ref=nb_sb_noss?url=search-别名%3Daps&field关键字=Java&rh=i%3Aaps%2Ck%3AJava”);
List searchResults=driver.findElements(按
.xpath(“//div[@class='s-item-container'][1]/div/div/div[@class='a-fixed-left-grid-col a-col-right']”);
System.out.println(searchResults.size());
试一试{
if(searchResults.size()>0){
字符串标题,author=null;
int i=0;
for(WebElement el:searchResults){
((JavascriptExecutor)driver).executeScript(“参数[0].ScrollingToView();”,el);
i++;
title=el.findElement(通过.cssSelector(“h2.a-size-medium.s-inline.s-access-title.a-text-normal”))
.getText();
System.out.println(“标题:+i+”-“+Title”);
if(el.findElements(由.cssSelector(“div.a-row.a-spating-small>div:n个子项(2)”)).size()>0){
author=el.findElement(由.cssSelector(“div.a-row.a-spating-small>div:n个子项(2)”).getText();
}
System.out.println(“Author:+i+”-“+(Author.isEmpty()?“Author Not Found”:Author));
}
}否则
System.out.println(“您的搜索没有结果”);
}捕获(例外e){
System.out.println(e.getLocalizedMessage());
}
}
根据您的问题更新,要检索图书作者姓名,您需要诱导WebDriverWait以使所需元素可见,您可以使用以下任一解决方案:
:css选择器
public static void testMF() { WebDriver driver; System.setProperty("webdriver.gecko.driver", "./src/drivers/geckodriver64bit.exe"); driver = new FirefoxDriver(); driver.get( "https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=Java&rh=i%3Aaps%2Ck%3AJava"); List<WebElement> searchResults = driver.findElements(By .xpath("//div[@class='s-item-container'][1]/div/div/div[@class='a-fixed-left-grid-col a-col-right']")); System.out.println(searchResults.size()); try { if (searchResults.size() > 0) { String title, author = null; int i = 0; for (WebElement el : searchResults) { ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", el); i++; title = el.findElement(By.cssSelector("h2.a-size-medium.s-inline.s-access-title.a-text-normal")) .getText(); System.out.println("Title:" + i + "-" + title); if(el.findElements(By.cssSelector("div.a-row.a-spacing-small > div:nth-child(2)")).size()>0){ author = el.findElement(By.cssSelector("div.a-row.a-spacing-small > div:nth-child(2)")).getText(); } System.out.println("Author:" + i + "-" + (author.isEmpty()?"Author Not Found":author)); } } else System.out.println("Your search has no results"); } catch (Exception e) { System.out.println(e.getLocalizedMessage()); } }
[RemoteTestNG] detected TestNG version 6.14.2
1542125453774 mozrunner::runner INFO Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-foreground" "-no-remote" "-profile" "C:\\Users\\Dhamo\\AppData\\Local\\Temp\\rust_mozprofile.ZTVooPdHTxOZ"
1542125455373 Marionette INFO Listening on port 63531
1542125455395 Marionette WARN TLS certificate errors will be ignored for this session
Nov 13, 2018 10:10:55 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Cay S. Horstmann
Cay S. Horstmann
public static void testMF() {
WebDriver driver;
System.setProperty("webdriver.gecko.driver", "./src/drivers/geckodriver64bit.exe");
driver = new FirefoxDriver();
driver.get(
"https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=Java&rh=i%3Aaps%2Ck%3AJava");
List<WebElement> searchResults = driver.findElements(By
.xpath("//div[@class='s-item-container'][1]/div/div/div[@class='a-fixed-left-grid-col a-col-right']"));
System.out.println(searchResults.size());
try {
if (searchResults.size() > 0) {
String title, author = null;
int i = 0;
for (WebElement el : searchResults) {
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", el);
i++;
title = el.findElement(By.cssSelector("h2.a-size-medium.s-inline.s-access-title.a-text-normal"))
.getText();
System.out.println("Title:" + i + "-" + title);
if(el.findElements(By.cssSelector("div.a-row.a-spacing-small > div:nth-child(2)")).size()>0){
author = el.findElement(By.cssSelector("div.a-row.a-spacing-small > div:nth-child(2)")).getText();
}
System.out.println("Author:" + i + "-" + (author.isEmpty()?"Author Not Found":author));
}
} else
System.out.println("Your search has no results");
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}
}
List<WebElement> author_name_elements = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("ul#s-results-list-atf span.a-size-small.a-color-secondary>a.a-link-normal.a-text-normal")));
for (WebElement author_name:author_name_elements){
System.out.println(author_name.getText());
List<WebElement> author_name_elements = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//ul[@id='s-results-list-atf']//span[contains(.,'by')]//following::span[1]/a[@class='a-link-normal a-text-normal']")));
for (WebElement author_name:author_name_elements){
System.out.println(author_name.getText());