要求:访问Indeed.com 在什么领域使用QA工程师和在哪里使用西雅图,华盛顿州。 从亚马逊或自动化以外的所有页面打印职位描述/标题
问题:在Firepath中我使用的这个xpath // div [包含(@id,' p')] [contains(@class,' row')]选择所有 第1页的工作。但是当我执行下面的代码时,它只打印第一页的第一个作业描述 一遍又一遍地,同时继续点击其他页面。
我得到的输出:
高级质量保证工程师 - 公民...... Sound Transit - 12条评论 - 西雅图,华盛顿 $ 79,626 - 每年99,533美元 导师,教练和指导QA工程师维持既定的工作标准。通过为质量保证提供指导,支持质量保证小组内的一致性...... 保存工作 赞助
代码:
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
public class QAJob {
int MAX_PAGES;
@Test
public void jobSearch(){
WebDriver driver= new FirefoxDriver();
driver.get("https://www.indeed.com");
driver.findElement(By.id("what")).sendKeys("QA Engineer");
driver.findElement(By.id("where")).clear();
driver.findElement(By.id("where")).sendKeys("Seattle,WA");
driver.findElement(By.id("fj")).click();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
// Close the pop up window that appears
driver.findElement(By.id("prime-popover-close-button")).click();
//Code to scroll down
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("window.scrollBy(0,1000)", "");
//Find and print the number of pages found for search
List<WebElement> search_pages=driver.findElements(By.xpath("//div[contains(@class,'pagination')]//a"));
System.out.println("Number of pages found for job search is " +search_pages.size());
//Code to get and print job descriptions,title
List<WebElement> job_desc=driver.findElements(By.xpath("//div[contains(@id,'p')][contains(@class,'row')]"));
for(WebElement e: job_desc){
//using String so that I can use 'contains'
String str_job_description=e.getText();
while(search_pages.size()!=0){
//find Next link and click on it till the size is !=0 to get to last page
driver.findElement(By.xpath("//span[contains(@class,'np')][contains(text(),'Next')]")).click();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Do not want Amazon or Automation jobs
if(!((str_job_description.contains("Automation")) || (str_job_description.contains("Amazon"))) ){
System.out.println(str_job_description);
}
}
}
}
}
我可以使用一些有用的建议/想法。提前感谢您的时间。
答案 0 :(得分:0)
对于job_desc
(外部for
循环)中的每个元素,您点击下一个按钮,直到到达最后一页(内部while
循环)。 for
循环应位于while
内。您可以尝试这样的事情(未经测试)
while(search_pages.size() != 0) {
List<WebElement> job_desc=driver.findElements(By.xpath("//div[contains(@id,'p')][contains(@class,'row')]"));
for(WebElement e: job_desc){
String str_job_description=e.getText();
if(!((str_job_description.contains("Automation")) || (str_job_description.contains("Amazon"))) ){
System.out.println(str_job_description);
}
}
driver.findElement(By.xpath("//span[contains(@class,'np')][contains(text(),'Next')]")).click();
}
作为旁注,不需要在每次迭代时定义隐式等待driver.manage().timeouts().implicitlyWait
,在创建driver
时定义一次。如果您想等待,请使用Expected Conditions
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By by));