尽管我的Xpath正确,但Selenium WebDriver并未执行所需的操作

时间:2019-11-28 14:28:12

标签: selenium-webdriver

尽管我的Xpath正确,Selenium WebDriver并未执行所需的操作:

public class Openchrome{
    public static void main(String[] args){
    System.setProperty("webdriver.chrome.driver","C:\\Users\\DELL\\Downloads\\chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.get("http://www.amazon.in");
    driver.manage().window().maximize();
    driver.manage().deleteAllCookies();
    driver.manage().timeouts().pageLoadTimeout(50, TimeUnit.SECONDS);
    driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Sri Raghavendra Swamy");
    driver.findElement(By.className("nav-input")).click();
    driver.findElement(By.xpath("//span[contains(text(),'Sri Sadhguru Raghavendra Swamy Jeevitha Charitra')]")).click();
    WebDriverWait wait = new WebDriverWait(driver,60);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@id='buybox-see-all-buying-choices-announce']")));
    driver.findElement(By.xpath("//a[@id='buybox-see-all-buying-choices-announce']")).click();
    }
}

1 个答案:

答案 0 :(得分:1)

是的,您所有的定位器都是正确的。您的问题来自以下行:

driver.findElement(By.xpath("//span[contains(text(),'Sri Sadhguru Raghavendra Swamy Jeevitha Charitra')]")).click();

完成上述操作后,它将带您进入新标签页。您需要先进行切换才能执行某项操作,因此在执行上述行之后请使用.getWindowHandles(),如下所示:

ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
//switch to second tab
driver.switchTo().window(tabs.get(1));

WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@id='buybox-see-all-buying-choices-announce']")));
driver.findElement(By.xpath("//a[@id='buybox-see-all-buying-choices-announce']")).click();

如果您想再次返回第一个标签,只需使用tabs.get(0)再次切换即可。