我试图通过在不同的网站上测试来学习硒。在这个过程中,我正在尝试使用Flipkart网站。在这,我想给puma是搜索栏,并试图点击其中一个结果项。但我无法使用下面提到的代码来做到这一点。任何人都可以帮忙解决它吗?
其次,如果我们点击任何项目,它将被重定向到新标签。如何使用相同的脚本访问新标签元素?
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class AutomationTesting {
public static void main(String[] args) {
System.setProperty("webdriver.gecko.driver","/Users/xxxx/eclipse-workspace/seleniumTesting/lib/geckoDriver/geckodriver");
WebDriver driver = new FirefoxDriver();
driver.get("https://www.google.de");
driver.findElement(By.id("lst-ib")).sendKeys("flipkart");
driver.findElement(By.id("lst-ib")).sendKeys(Keys.ENTER);
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Flipkart")));
driver.findElement(By.partialLinkText("Flipkart")).click();
driver.findElement(By.cssSelector("._3Njdz7 [class = '_2AkmmA _29YdH8']")).click();
driver.findElement(By.xpath("//input[@class = 'LM6RPg']")).click();
driver.findElement(By.xpath("//input[@class = 'LM6RPg']")).sendKeys("Puma");
driver.findElement(By.xpath("//button[@class = 'vh79eN']")).click();
driver.findElement(By.xpath("//a[@title='Puma Men Black Wallet' and @class= '_1Nyybr _30XEf0']")).click();
}
}
您需要使用window switchTo功能。
String mainWindowHandle = driver.getWindowHandle();
ArrayList<String> wins = driver.getWindowHandles();
// You can use a for loop here, or get the assumed second window directly
driver.switchTo().window(wins.get(1));
// Test some things, then switch back
driver.close();
driver.switchTo().window(mainWindowHandle);
见http://www.seleniumhq.org/docs/03_webdriver.jsp#moving-between-windows-and-frames
你必须检查整个框架。我建议不要自己定制xpaths尝试firebug
和firepath
添加Firefox
获取整个元素的xpath。检查结果显示的整个帧,然后将其保存在一个变量中,如下所示:
List<WebElements> searchResults;
searchResults=driver.findElements(By.xpath("Your xpath"));
然后使用索引访问此列表的元素,然后您可以执行相同的.click()
操作。更多关于使用this和firebug
捕获xpath的firepath
链接
问题1:在执行上面代码中的最后一行期间,我收到以下错误。无法找到element:// a [@ title ='Puma Men Black Wallet'和@ class ='_1Nyybr _30XEf0']
- >由于延迟加载webelement在你点击它上面的点击事件时不存在于dom中。所以要完成这个,你需要在视图上创建webElement然后点击click事件。
请参考以下代码: -
driver.get("https://www.google.de");
driver.findElement(By.id("lst-ib")).sendKeys("flipkart");
driver.findElement(By.id("lst-ib")).sendKeys(Keys.ENTER);
WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.partialLinkText("Flipkart")));
driver.findElement(By.partialLinkText("Flipkart")).click();
try{
driver.findElement(By.cssSelector("._3Njdz7 [class = '_2AkmmA _29YdH8']")).click();
}catch(Exception e){
System.out.println("No division");
}
driver.findElement(By.xpath("//input[@class = 'LM6RPg']")).click();
driver.findElement(By.xpath("//input[@class = 'LM6RPg']")).sendKeys("Puma");
driver.findElement(By.xpath("//button[@class = 'vh79eN']")).click();
// Thread.sleep(3000);
wait.until(ExpectedConditions.visibilityOf( driver.findElement(By.xpath("//a[@title='Puma Men Black Wallet']"))));
// getting element into view
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("//*[@alt='Puma Men Black Wallet']")));
Thread.sleep(2000);
driver.findElement(By.xpath("//*[@alt='Puma Men Black Wallet']")).click();
问题2:如果最后一个命令有效,那么它将被重定向到新选项卡。那么如何从new-tab访问元素呢?
- >正如建议@Damian Jansen在最后点击事件后添加该代码。
String mainWindowHandle = driver.getWindowHandle();
ArrayList<String> wins = driver.getWindowHandles();
for(String win : wins ){
driver.switchTo().window(win);
// other operation
System.out.println(driver.getTitle());
}
// back to old window
driver.switchTo().window(mainWindowHandle);
System.out.println(driver.getTitle());
希望这对你有所帮助:)
使用此代码达到puma,然后在代码下面选择使用选项
public static void main(String[] args) throws InterruptedException, AWTException {
System.setProperty("webdriver.chrome.driver","G:\\java programme\\SendkeysExample\\lib\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("https://www.google.com");
driver.findElement(By.id("lst-ib")).sendKeys("flipkart");
driver.findElement(By.id("lst-ib")).sendKeys(Keys.ENTER);
driver.findElement(By.linkText("Flipkart")).click();
driver.findElement(By.className("LM6RPg")).sendKeys("Puma");
Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_DOWN);
rb.keyPress(KeyEvent.VK_DOWN);
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_DOWN);
rb.keyRelease(KeyEvent.VK_DOWN);
rb.keyRelease(KeyEvent.VK_ENTER);
Thread.sleep(2000);
/*driver.findElement(By.xpath(".//*[@id='container']/div/header/div[1]/div/div/div/div[1]/form/ul/li[2]/a"));
driver.findElement(By.className("icon-add-circle"))*/;
driver.close();
}
}