Не удается найти элемент с помощью Selenium Webdriver - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь перейти к "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"}

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Вы можете попробовать этот xpath, используя для воображения и немного подождать, как @chris упомянул

//div//h3[contains(text(),'Imagine')]
0 голосов
/ 16 мая 2018

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");}
0 голосов
/ 16 мая 2018

Только первая страница ожидает завершения загрузки перед запуском скрипта.Если вы уйдете со страницы, то вам придется ждать вручную.Не дожидаясь, скрипт перейдет к следующей команде сразу после нажатия на ссылку, которая изменяет страницу, и, поскольку страница еще не загружена, вы не найдете элемент.Это приводит к ошибке.

Самый простой способ ожидания - использовать "WebDriverWait"

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(>someid>)));

Здесь есть более простые примеры: http://toolsqa.com/selenium-webdriver/wait-commands/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...