Selenium Java-无法从网页元素中获取文本

时间:2016-06-21 12:56:52

标签: java selenium

网页我正在自动化:https://app.ghostinspector.com/account/create

场景:我点击注册页面并输入详细信息并单击注册按钮,现在如果用户传递相同的电子邮件地址,则消息"电子邮件地址已被使用。"在网站上显示,所以我想要做的是找到文本消息清除它并在运行时输入另一个电子邮件地址。

现在问题是selenium的gettext方法没有获取错误消息文本。

以下是代码:

 WebElement email_in_use = driver.findElement(
    By.xpath("/html/body/div[1]/div/div/div[2]/form/div/div[1]"));
    String message = email_in_use.getText();    
    System.out.println(message);

让我知道这里的问题是什么。

5 个答案:

答案 0 :(得分:1)

您只需等待一段时间,等待包含错误消息的DIV出现。下面的代码对我有用。

WebDriver driver = new FirefoxDriver();
driver.get("https://app.ghostinspector.com/account/create");
driver.findElement(By.id("input-firstName")).sendKeys("Johnny");
driver.findElement(By.id("input-lastName")).sendKeys("Smith");
driver.findElement(By.id("input-email")).sendKeys("abc@abc.com");
driver.findElement(By.id("input-password")).sendKeys("abc123");
driver.findElement(By.id("input-terms")).click();
driver.findElement(By.id("btn-create")).click();
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement e = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div[ng-show='errors']")));
System.out.println(e.getText());

答案 1 :(得分:0)

尝试使用此功能清除文本框

driver.switchTo().alert().getText(); 

答案 2 :(得分:0)

您正在使用getAttribute(“value”)从div元素中获取文本。尝试使用email_in_use.getText()。

答案 3 :(得分:0)

您需要在此处WebDriverWait实施getText(),因为error元素已经存在,没有任何文字,并且在发生任何错误时会填充文字,例如电子邮件地址已经在使用中。

所以你需要等到error元素有一些文本,如下所示: -

WebDriverWait wait = new WebDriverWait(driver, 100);

String message = wait.until(new ExpectedCondition<String>() {
                    public String apply(WebDriver d) {
                        WebElement el = d.findElement(By.xpath("/html/body/div[1]/div/div/div[2]/form/div/div[1]"));
                        if(el.getText().length() != 0) {
                            return el.getText();
                        }
                    }
                });

System.out.println(message);

注意: - 由于您的xpath位置取决于元素位置,如果在操作过程中添加某些元素,可能会失败,我建议您可以使用此xpathBy.xpath("//div[@ng-show='errors']")

您也可以像下面这样使用: -

wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//div[@ng-show='errors']"), "E-mail address is already in use"));
WebElement email_in_use = driver.findElement(By.xpath("//div[@ng-show='errors']"));
String message = email_in_use.getText();

希望它能起作用.... :)

答案 4 :(得分:0)

您是否尝试过element.getAttribute('value')

src