我正试图导航到" https://developers.google.com/"。
然后我点击xpath的链接并重定向到另一个页面。
在第一页上找到元素和点击链接时,一切都有效。
但是在进入新页面之后,我似乎找不到想要查找的元素。
重定向的网页是" https://cloud.withgoogle.com/next18/sf/?utm_source=devsite&utm_medium=hpp&utm_campaign=cloudnext_april18"
这是检查文本是否相等。
confirmText("Imagine", "//*[@id=\"main\"]/span/div[2]/div/div/div[1]/div[1]/div/div[1]/div[2]/h3");
public static void confirmText(String text, String xpath) {
System.out.println("Trying to confirm that given string is equal to the text on page.");
WebElement element = driver.findElement(By.xpath(xpath));
System.out.println("Test case: " + text);
System.out.println("Result: " + element.getText());
if (element.getText() == text) {
System.out.println("\nEquals.");
}
else {
System.out.println("\nDoes not equals.");
}
System.out.println("\n\n");
}
这是发送密钥。
public static void sendKeys() {
WebElement firstname = driver.findElement(By.id("firstName"));
firstname.sendKeys("John");
WebElement lastname = driver.findElement(By.xpath("//*[@id=\"lastName\"]"));
lastname.sendKeys("Doe");
WebElement email = driver.findElement(By.xpath("//*[@id=\"email\"]"));
email.sendKeys("johndoe@gmail.com");
WebElement jobtitle = driver.findElement(By.xpath("//*[@id=\"jobTitle\"]"));
jobtitle.sendKeys("Software Engineer");
WebElement company = driver.findElement(By.xpath("//*[@id=\"company\"]"));
company.sendKeys("ABCD");
}
错误是
Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="main"]/span/div[2]/div/div/div[1]/div[1]/div/div[1]/div[2]/h3"}
答案 0 :(得分:0)
在脚本启动之前,只有第一页实际上等待完成加载。如果您从页面导航,则需要手动等待。在没有等待的情况下,脚本将在单击更改页面的链接后立即继续执行下一个命令,并且由于页面尚未加载,因此您将找不到该元素。这给出了错误。
最简单的等待方式是使用" WebDriverWait"
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(>someid>)));
这里有更简单的例子: http://toolsqa.com/selenium-webdriver/wait-commands/
答案 1 :(得分:0)
你可以尝试使用这个xpath进行想象,然后等待@chris提到
//div//h3[contains(text(),'Imagine')]
答案 2 :(得分:0)
JavascriptExecutor可用于获取元素的值
参考代码,
confirmText("Imagine", "//*[@id=\"main\"]/span/div[2]/div/div/div[1]/div[1]/div/div[1]/div[2]/h3");
public static void confirmText(String text, String xpath) {
System.out.println("Trying to confirm that given string is equal to the text on page.");
WebElement element = driver.findElement(By.xpath(xpath));
JavascriptExecutor executor = (JavascriptExecutor)driver;
System.out.println("Test case: " + text);
System.out.println("Result: " + executor.executeScript("return arguments[0].innerHTML;", element););
if (text.equals(executor.executeScript("return arguments[0].innerHTML;", element))) {
System.out.println("\nEquals.");
}
else {
System.out.println("\nDoes not equals.");
}
System.out.println("\n\n");}