无法插入文本 - 显示元素不可见的消息

时间:2017-12-26 08:22:49

标签: selenium

我在网站上运行自动化,点击按钮后,打开PayPal屏幕以插入详细信息。 PayPal在另一个标签中打开。我添加了一个语法,将测试移动到相关选项卡,然后我插入一个语法,检查"电子邮件输入"字段存在(检查它是否真正进入正确的选项卡) - 以及此测试的结果: - 字段存在。 然后 - 我添加了相同字段的语法以插入电子邮件,测试失败 - 文本未插入,并且有一个msg表示该字段不可见。 无需滚动,因为该字段位于屏幕顶部。 在这种情况下我该怎么办?

这是相关代码:

    String oldTab = driver.getWindowHandle();

    comOps.clickOrChose(PLS.buyButton);
    Thread.sleep(4000);

    ArrayList<String> newTab = new ArrayList<String> (driver.getWindowHandles());

    newTab.remove(oldTab);  
    driver.switchTo().window(newTab.get(0)); 

    comOps.verifyElementExist(PLP.payPalEmail);

    comOps.insertText(PLP.payPalEmail, "paypal-buyer@makeitleo.com");

1 个答案:

答案 0 :(得分:0)

您收到此错误消息的原因是该元素显然存在但在您尝试向其输入文本时不可见。元素不可见的原因很多。

鉴于新选项卡已打开,可能的原因是页面(及其元素)仍在加载。如果是这种情况,您需要等待元素的可见性,例如使用这段代码(在插入文本之前):

WebDriverWait wait = new WebDriverWait(driver, 300); //waiting up to 5 minutes    
ExpectedCondition<WebElement> condition = 
    ExpectedConditions.visibilityOf(PLP.payPalEmail);
wait.until(condition);

注意:此解决方案假定PLP.payPalEmail的类型为org.openqa.selenium.WebElement。如果类型为org.openqa.selenium.By,请使用visibilityOfElementLocated(By locator)

从您的代码段中讲述,我假设comOps是包装所有Selenium操作的类的对象。因此,最好将上面的代码放在该类中的某个方法中,如下所示:

public void verifyElementVisible(WebElement element) {
    WebDriverWait wait = new WebDriverWait(driver, 300); //ToDo: use configurable timeout    
    ExpectedCondition<WebElement> condition = 
    ExpectedConditions.visibilityOf(element);
    wait.until(condition);
}

并像这样称呼它

comOps.verifyElementVisible(PLP.payPalEmail);