org.openqa.selenium.NoSuchElementException: такого элемента нет: невозможно найти элемент при попытке входа через Selenium с Java - PullRequest
0 голосов
/ 18 мая 2018

Я старался изо всех сил написать сценарий входа в Selenium для следующего сайта https://www.topmba.com/app. Вот мой код:

public class TopMba {
    String driverPath = "/usr/bin/chromedriver";
    WebDriver driver;
    String username = "test@gmail.com"; // Change to your username and passwrod
    String password = "12345";
    // This method is to navigate topmba URL
    @BeforeClass
    public void init() {

        System.setProperty("webdriver.chrome.driver", driverPath); 
        driver = new ChromeDriver();
        driver.navigate().to("https://www.topmba.com");
    }
    // To log in topmba
    @Test
    public void login() {
        driver.findElement(By.className("tm-user")).click();
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        driver.switchTo().frame(driver.findElement(By.xpath("//*[@id=\"tm-modal-frame-nvtfa7vvbm\"]")));
        driver.findElement(By.id("edit-user")).sendKeys(username);
        driver.findElement(By.id("edit-pass")).sendKeys(password);
        driver.findElement(By.id("edit-submit")).click();
        driver.switchTo().defaultContent();}
    @AfterClass
    public void quit() {
        driver.close();
    }

Вот исключение:

org.openqa.selenium.NoSuchElementException: нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// * [@ id =" tm-modal-frame-nvtfa7vvbm "] "}

Ответы [ 2 ]

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

Есть несколько вещей, о которых вам нужно позаботиться:

  • Чтобы щелкнуть по значку с всплывающей подсказкой как Логин вы использовали:

    driver.findElement(By.className("tm-user")).click();
    

    Если вы посмотрите HTML, Стратегия локатора уникально идентифицирует элемент, но для более сфокусированного клика вам нужно нацелиться на <span> тег, который находится внутри тега <a>, который находится внутри тега <li> с атрибутом class, который вы использовали.Грубо, у вас есть WebDriverWait .

  • Когда откроется диалоговое окно Вход , вы увидитеполя входа находятся в пределах <iframe>.Таким образом, вы должны заставить WebDriverWait для обоих случаев, один раз для кадра , чтобы быть доступным и для желаемого элемента , чтобы можно было нажимать , и вы можете использовать следующиерешение:

  • Кодовый блок:

    System.setProperty("webdriver.gecko.driver", "C:\\path\\to\\geckodriver.exe");
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.topmba.com");
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("li.tm-user>a.tmba-user>span.fa-img-icons.fa-img-user"))).click();
    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@src='/app/sso/user/login']")));
    new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.input-block-level.form-text.required.form-control#edit-name"))).sendKeys("khawar");
    driver.findElement(By.cssSelector("input.input-block-level.form-text.required.form-control#edit-pass")).sendKeys("khawar");
    driver.findElement(By.cssSelector("button.btn.btn-warning.btn-block.button.js-form-submit.form-submit#edit-submit")).click();
    
  • Снимок браузера:

khawar

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

Используйте следующий код:

    driver.get("https://www.topmba.com");
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    String parentWindowHandle =  driver.getWindowHandle();
    driver.findElement(By.className("tm-user")).click();
    WebElement  iframe = driver.findElement(By.xpath("//iframe[contains(@src,'app/sso/user/login')]"));
    driver.switchTo().frame(iframe);
    driver.findElement(By.id("edit-name")).sendKeys(username);
    driver.findElement(By.id("edit-pass")).sendKeys(password);
    driver.findElement(By.id("edit-submit")).click();
    driver.switchTo().window(parentWindowHandle);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...