Selenium:NoSuchElementException:没有这样的元素:无法定位元素:

时间:2017-05-19 16:53:09

标签: selenium

我正在尝试为this page编写一个异常测试: 这是我的pom.xml

<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-picocontainer -->
    <dependency>
        <groupId>info.cukes</groupId>
        <artifactId>cucumber-picocontainer</artifactId>
        <version>1.2.5</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.4.0</version>
    </dependency>

以下是代码:

System.setProperty("webdriver.chrome.driver", "C:\\Driver\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.get("http://www.behsad.com/nportal/Default.aspx?tabid=55");

            driver.findElement(By.id("dnn_dnnUser_enhancedRegisterLink")).click();

            WebDriverWait wait=new WebDriverWait(driver, 30);
            WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(
                                            By.id("dnn_dnnUser_enhancedRegisterLink")));
            element.click();

            driver.switchTo().frame("iPopUp");
                driver.findElement(By.id("dnn_ctr_Register_userForm_Username_Username_TextBox"))
          .sendKeys("Hey");

问题是它到了正确的地方,但它没有做任何事情。它坚持这个水平

我确定,我已经要求提供有效身份证明  dnn_ctr_Register_userForm_Username_Username_TextBox但您可以告诉我为什么它不能写Hey吗?

更新:此行

driver.findElement(By.id("dnn_dnnUser_enhancedRegisterLink")).click();

点击此按钮enter image description here

然后此页面应加载enter image description here

2 个答案:

答案 0 :(得分:3)

在回答您的问题之前,请允许我指出,当浏览器打开页面时,页面加载需要一些时间。加载时,您的脚本会尝试查找标识为dnn_dnnUser_enhancedRegisterLink的元素。在某些情况下,搜索此元素时可能会失败,因此我建议您添加等待元素变为可见。试试这个:

WebDriverWait wait=new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(
                                By.id("dnn_dnnUser_enhancedRegisterLink")));
element.click();

现在点击元素后,会出现一个弹出窗口。该弹出窗口位于iframe内,因此您需要在搜索ID为dnn_ctr_Register_userForm_Username_Username_TextBox的元素之前将Selenium的焦点切换为该焦点。 iframe的ID为iPopUp,因此在搜索元素之前执行此操作:

driver.switchTo().frame("iPopUp");

所以最终的代码应该是这样的:

driver.get("http://www.behsad.com/nportal/Default.aspx?tabid=55");
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(
                                 By.id("dnn_dnnUser_enhancedRegisterLink")));
element.click();
driver.switchTo().frame("iPopUp");
WebElement searchElement = wait.until(ExpectedConditions.visibilityOfElementLocated(
                By.id("dnn_ctr_Register_userForm_Username_Username_TextBox")));
searchElement.sendKeys("Hey");

答案 1 :(得分:0)

我在浏览器中打开页面并使用控制台尝试使用javascript获取元素:

document.getElementById("dnn_ctr_Register_userForm_Username_Username_TextBox")

只是为了确保你对现有的id是正确的。

相关问题