簡體   English   中英

org.openqa.selenium.NoSuchElementException:沒有這樣的元素:嘗試使用Java通過Selenium登錄時無法找到元素

[英]org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element while trying to login through Selenium with Java

我已盡力在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:否這樣的元素:無法找到元素:{“方法”:“ xpath”,“選擇器”:“ // * [@ id =“ tm-modal-frame-nvtfa7vvbm”]“}

使用以下代碼:

    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);

您需要注意以下幾點:

  • 要單擊帶有工具提示圖標作為登錄名,您已使用過:

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

    如果您查看HTML,此定位器策略會唯一地標識元素,但是要獲得更集中的點擊,您需要將<span>標簽定位在<a>標簽內,而<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(); 
  • 瀏覽器快照:

卡瓦爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM